none
Ayuda con JOIN

    Pregunta

  • Estimados.

    Tengo 2 tablas en SQL 2008

    Tabla A, campo ID INT

    Tabla B, campo TS INT,ID INT

    Select A.ID From A INNER JOIN B ON A.ID=B.ID

    Pero en caso que la B. ID tenga el valor 99 también debe mostrarlo, es correcto hacerlo asi ?

    Select A.ID From A INNER JOIN B ON A.ID=B.ID OR B.ID= 99

    Pues se demora mucho mas que al utilizarlo con un EXISTS

    Select A.ID From A

    Where EXISTS

    (

       Select 1 B Where B.ID IN (A.ID,99)

    )

    Saludos.


    DBA SQL Server Santiago/Chile

    jueves, 12 de octubre de 2017 15:30

Respuestas

  • Pero en caso que la B.ID tenga el valor 99 también debe mostrarlo, ¿es correcto hacerlo así?

    Combinas ambos conjuntos mediante INNER JOIN, en consecuencia se espera que los valores de las columnas de unión intersecten. Si esperas mostrar un valor que podría no existir en el conjunto de la izquierda entonces deberías combinar mediante RIGHT JOIN, por ejemplo:

    DECLARE @TableA table (id int);
    DECLARE @TableB table (id int);
    
    INSERT INTO @TableA VALUES (1), (2), (3);
    INSERT INTO @TableB VALUES (1), (2), (3), (4), (99);
    
    SELECT *
    FROM
        @TableA a
        RIGHT JOIN @TableB b ON a.id = b.id
    WHERE a.id IS NOT NULL OR b.id = 99;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta Juan MondragónModerator jueves, 12 de octubre de 2017 21:30
    • Marcado como respuesta CMAPM viernes, 13 de octubre de 2017 15:26
    jueves, 12 de octubre de 2017 17:59

Todas las respuestas

  • Pero en caso que la B.ID tenga el valor 99 también debe mostrarlo, ¿es correcto hacerlo así?

    Combinas ambos conjuntos mediante INNER JOIN, en consecuencia se espera que los valores de las columnas de unión intersecten. Si esperas mostrar un valor que podría no existir en el conjunto de la izquierda entonces deberías combinar mediante RIGHT JOIN, por ejemplo:

    DECLARE @TableA table (id int);
    DECLARE @TableB table (id int);
    
    INSERT INTO @TableA VALUES (1), (2), (3);
    INSERT INTO @TableB VALUES (1), (2), (3), (4), (99);
    
    SELECT *
    FROM
        @TableA a
        RIGHT JOIN @TableB b ON a.id = b.id
    WHERE a.id IS NOT NULL OR b.id = 99;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta Juan MondragónModerator jueves, 12 de octubre de 2017 21:30
    • Marcado como respuesta CMAPM viernes, 13 de octubre de 2017 15:26
    jueves, 12 de octubre de 2017 17:59
  • Muchas Gracias Williams.

    DBA SQL Server Santiago/Chile

    viernes, 13 de octubre de 2017 15:26