es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccione una fila de la tabla con el valor deseado cuando se selecciona una columna cuyo valor no está en la tabla en la cláusula where con la palabra clave ‘in’.

Tengo una tabla con una de las columnas como ID. Tengo un conjunto de valores que doy en la cláusula where para comparar la columna ‘ID’ usando la palabra clave ‘in’. Quiero seleccionar la fila si el valor en ese conjunto de valores tiene un registro en la tabla. Si no, el valor que no está en la tabla debe ser seleccionado junto con valores vacíos en otras columnas.

Por ejemplo:
Hay una tabla con las columnas ID y Animal. Tiene 8 registros.

Si ejecuto la consulta:
SELECT ID, Animal from #Temp1 where ID in (4,8)

devolverá el siguiente resultado.

Pero, si ejecuto la consulta:
SELECT ID, Animal from #Temp1 where ID in (4,8,12)

debería devolver el siguiente resultado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar las filas basadas en los valores de la cláusula where y también incluir los valores que no están en la tabla, la consulta necesita usar una unión izquierda con una tabla construida a partir del conjunto de valores. La unión izquierda devolverá todas las filas de la tabla construida junto con cualquier fila coincidente de la tabla original.

    Aquí está la consulta para lograr esto:

    DECLARE @values TABLE (ID INT)
    INSERT INTO @values(ID) VALUES (4), (8), (12)
    
    SELECT v.ID, t.Animal
    FROM @values v
    LEFT JOIN #Temp1 t ON v.ID = t.ID
    

    Esto devolverá el resultado deseado:

    ID  | Animal
    ----|-------
    4   | Perro
    8   | Gato
    12  | NULL
    

    La tabla construida @values contiene el conjunto de valores mencionados en la cláusula where. La unión izquierda con la tabla #Temp1 devuelve todas las filas de la tabla @values junto con cualquier fila coincidente de la tabla #Temp1 basada en la columna ID.

    Dado que no hay ninguna fila en la tabla #Temp1 con ID 12, la unión devuelve NULL para la columna Animal.

Comments are closed.