none
Error en cláusula WHERE de MySql RRS feed

  • Pregunta

  • Hola a todos:

    Pido anticipadamente perdón por tratar el problema en este foro, pero siempre me ha ayudado en mis dudas.

    Tengo la SELECT siguiente que funciona perfectamente en SQLServer y no da ningún problema, ahora necesito poder ponerla en mysql y la misma no me arroja ningún error pero tampoco me dá ningún resultado. Comento que he repasado las tablas, los campos, etc. y todo lo que he creído que tenía que repasar y no me funciona, si le quito los dos "AND" a la cláusula where me trae perfectamente todos los registros, pero al añadir los filtros con el AND no me trae nada.

    Os pongo la consulta que es la misma que para SqlServer pero ya digo que en MySQL no me funciona.

    SELECT 
        CnaeColombia.*, Empresas.CNAE_93
    FROM
        CnaeColombia,
        Empresas
    WHERE
        Empresas.Cod_Empresa = "COL"
            AND CnaeColombia.CNAE = Empresas.CNAE_93
            AND CnaeColombia.Tipo_CNAE = Empresas.TIPO_CAE

    Muchas gracias a todos.

    Gemma

    martes, 9 de febrero de 2021 14:29

Respuestas

  • Hola gemma_campillo:

    Probablemente sea Empresas.Cod_empresa = ....esa comilla doble debería de ser = 'COL'

    La mejor manera es quitar todo el where, luego añadir una sola restricción, luego la otra, y por último la tercera.

    SELECT 
        CnaeColombia.*, Empresas.CNAE_93
    FROM
        CnaeColombia INNER JOIN Empresas ON CnaeColombia.CNAE = Empresas.CNAE_93 AND CnaeColombia.Tipo_CNAE = Empresas.TIPO_CAE
    WHERE
        Empresas.Cod_Empresa = 'COL'


    martes, 9 de febrero de 2021 14:48
  • Hola gemma:

    Esto hay que dividirlo en partes. Simplifica y vencerás, sino el SQL es un mojón.

    SELECT 
        CnaeColombia.*
    FROM
        CnaeColombia;
    
    
    SELECT
    	Empresas.*
    	FROM 
    	Empresas
    WHERE 
     Empresas.Cod_Empresa = 'COL';

    De las dos querys, tienes que obtener, en la primera un montón de datos, pero fíjate sobre todo en la columna CNAE, que tiene que tener una coincidencia con la segunda query.

    Además de validar el filtro por los apóstrofes, la segunda query tendría que obtener al menos una fila cuyo CNAE_93 sea igual al cnaeColombia.CNAE. Identifica también tipoCae y tipoCnae si son coincidentes.

    Luego si los valores coinciden para hacer la relación podemos pensar en los tipos de datos.

    Nota: Si igual no te devuelve resultados, es posible, que existan valores similares, por ejemplo que tenga un espacio al final, en una columna y en la de la otra tabla no. (o cualquier caracter no visible tipo tabulador, intro etc que a veces contienen los datos)

    Prueba con Cod.Empresa LIKE '%COL%' 

    Si esto no funciona habrá que pensar que tienen diferentes intercalaciones. Pero eso es un paso posterior.

    • Marcado como respuesta gemma_campillo martes, 9 de febrero de 2021 16:26
    martes, 9 de febrero de 2021 16:08

Todas las respuestas

  • Hola gemma_campillo:

    Probablemente sea Empresas.Cod_empresa = ....esa comilla doble debería de ser = 'COL'

    La mejor manera es quitar todo el where, luego añadir una sola restricción, luego la otra, y por último la tercera.

    SELECT 
        CnaeColombia.*, Empresas.CNAE_93
    FROM
        CnaeColombia INNER JOIN Empresas ON CnaeColombia.CNAE = Empresas.CNAE_93 AND CnaeColombia.Tipo_CNAE = Empresas.TIPO_CAE
    WHERE
        Empresas.Cod_Empresa = 'COL'


    martes, 9 de febrero de 2021 14:48
  • Hola querido Javi, gracias como siempre.

    Mira, tampoco quiere salir el resultado. queda igual que antes, no sale el registro que viene de los campos de empresa: Cnae_93 = '04' y Tipo_CAE = "1", es muy raro. No te adjunto la imagen de Mysql porque llevo un rato y no me la carga. No se si desmenuzando la sql en dos o tres acierto a que salga el resultado. 

    Te agradezco enormemente tu ayuda desinteresada.

    Un fuerte abrazo Javi.

    Gemma

    martes, 9 de febrero de 2021 15:34
  • Hola gemma:

    Esto hay que dividirlo en partes. Simplifica y vencerás, sino el SQL es un mojón.

    SELECT 
        CnaeColombia.*
    FROM
        CnaeColombia;
    
    
    SELECT
    	Empresas.*
    	FROM 
    	Empresas
    WHERE 
     Empresas.Cod_Empresa = 'COL';

    De las dos querys, tienes que obtener, en la primera un montón de datos, pero fíjate sobre todo en la columna CNAE, que tiene que tener una coincidencia con la segunda query.

    Además de validar el filtro por los apóstrofes, la segunda query tendría que obtener al menos una fila cuyo CNAE_93 sea igual al cnaeColombia.CNAE. Identifica también tipoCae y tipoCnae si son coincidentes.

    Luego si los valores coinciden para hacer la relación podemos pensar en los tipos de datos.

    Nota: Si igual no te devuelve resultados, es posible, que existan valores similares, por ejemplo que tenga un espacio al final, en una columna y en la de la otra tabla no. (o cualquier caracter no visible tipo tabulador, intro etc que a veces contienen los datos)

    Prueba con Cod.Empresa LIKE '%COL%' 

    Si esto no funciona habrá que pensar que tienen diferentes intercalaciones. Pero eso es un paso posterior.

    • Marcado como respuesta gemma_campillo martes, 9 de febrero de 2021 16:26
    martes, 9 de febrero de 2021 16:08
  • Hola Javi:

    Bueno me has ayudado a ver el problema, está concentrado en: CnaeColombia.CNAE = Empresas.CNAE_93  los dos son tipo Varchar(3) pero algo falla porque si lo dejo solamente con el CnaeColombia.Tipo_CNAE = Empresas.TIPO_CAE me trae todos los registros. En cambio con el primero no me trae nada.

    Me pongo a solucionarlo y a probar, pero ya se por donde van los tiros. El problema está en los campos CNAE y CNAE_93.

    Muchas gracias querido amigo.

    Un abrazo.

    Gemma

    martes, 9 de febrero de 2021 16:26