none
Join Con Espacio En Blancos RRS feed

  • Pregunta

  • Hola Amigos, estoy volviéndome loco buscando la solución a esto. Les cuento,

    Tengo una tabla llamada "MODELO", en ella hay un campo llamado "DESCRIPCION" el cual por motivos de diseño hay descripciones que a simple vista son iguales pero se diferencian en espacios al final, ejemplo: "mod_141" y "mod_141   ", si se fijan este último modelo tiene 3 espacios en blanco al final, la cuestión es que tengo una tabla "EQUIPO" y en el campo "EQUIPO.DESCRIPCION" de esta tengo un registro así "mod_141" (sin espacio), el problema es que al hacer el join, me trae los dos registros, como si los campos en blanco los omitiera, comprobé que los espacios en blanco si están, así que ese no es el problema...necesito que me respete los espacios en blanco y que para este ejemplo solo me traiga el registro exacto con el que hace match.

    SELECT MODELO
    	FROM EQUIPO
    	LEFT JOIN MODELO 
    	ON EQUIPO.DESCRIPCION = MODELO.DESCRIPCION

    Alguna ayuda?

    Gracias!

    lunes, 12 de junio de 2017 21:53

Respuestas

  • No se me ocurre algo "simple", de pronto podrías reforzar la expresión de combinación mediante la longitud en bytes de cada valor:

    SELECT *
    FROM 
        EQUIPO e
        LEFT JOIN MODELO m ON e.DESCRIPCION = m.DESCRIPCION
    	   AND DATALENGTH(e.DESCRIPCION) = DATALENGTH(m.DESCRIPCION)

    Me baso en el siguiente ejemplo:

    DECLARE @Descripcion1 nvarchar(100) = 'mod_141';
    DECLARE @Descripcion2 nvarchar(100) = 'mod_141   ';
    
    SELECT 
        CASE WHEN @Descripcion1 = @Descripcion2 
    		  AND DATALENGTH(@Descripcion1) = DATALENGTH(@Descripcion2) THEN 'EQUAL' 
    	   ELSE 'DIFF' 
        END
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 12 de junio de 2017 22:25
  • Deleted
    martes, 13 de junio de 2017 0:06
  • Deleted
    martes, 13 de junio de 2017 17:49

Todas las respuestas

  • Mi pregunta es por que estás relacionando las tablas por un campo de tipo Varchar, los campos se relacionan por un tipo int o un campo que no sea varchar o text, ya que son tipos de campos no comparables.

    En caso contrario, te recomiendo eliminar los espacios en blanco de tu data como lo mencionan en este articulo.

    TRIM, LTRIM, RTRIM

    Espero sea de ayuda.

    lunes, 12 de junio de 2017 22:19
  • No se me ocurre algo "simple", de pronto podrías reforzar la expresión de combinación mediante la longitud en bytes de cada valor:

    SELECT *
    FROM 
        EQUIPO e
        LEFT JOIN MODELO m ON e.DESCRIPCION = m.DESCRIPCION
    	   AND DATALENGTH(e.DESCRIPCION) = DATALENGTH(m.DESCRIPCION)

    Me baso en el siguiente ejemplo:

    DECLARE @Descripcion1 nvarchar(100) = 'mod_141';
    DECLARE @Descripcion2 nvarchar(100) = 'mod_141   ';
    
    SELECT 
        CASE WHEN @Descripcion1 = @Descripcion2 
    		  AND DATALENGTH(@Descripcion1) = DATALENGTH(@Descripcion2) THEN 'EQUAL' 
    	   ELSE 'DIFF' 
        END
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 12 de junio de 2017 22:25
  • Deleted
    martes, 13 de junio de 2017 0:06
  • ya esta seteada en ON y sigue igual 
    martes, 13 de junio de 2017 16:20
  • por ahora es lo que me ha funcionado, muchas gracias, pero debe haber otra forma más "simple" creo...si no encuentro otra forma usaré tu solución.

    Gracias!

    martes, 13 de junio de 2017 16:21
  • Si amigo, lo sé, no debiese hacer join sobre texto, pero dicha tabla esta así y es la única forma de hacer join, gracias!
    martes, 13 de junio de 2017 16:21
  • Deleted
    martes, 13 de junio de 2017 17:49