sql - inner - Seleccione Query by Pair of fields usando una cláusula in
inner join en sql (5)
Aquí hay una solución muy similar en postgresql:
SELECT tmp_table.val1, tmp_table.val2
FROM tmp_table
WHERE (tmp_table.val1, tmp_table.val2) not in (select tmp_table2.val1, tmp_table2.val2 from tmp_table2);
Tengo una mesa llamada jugadores de la siguiente manera:
First_Id Second_Id Name
1 1 Durant
2 1 Kobe
1 2 Lebron
2 2 Dwight
1 3 Dirk
Deseo escribir una declaración de selección en esta tabla para recuperar todas las filas cuyos primeros identificadores y segundos coincidan con un grupo de identificadores primero y segundo especificados.
Así, por ejemplo, deseo seleccionar todas las filas cuyos identificadores primero y segundo son los siguientes: (1,1), (1,2) y (1,3). Esto recuperaría las siguientes 3 filas:
First_Id Second_Id Name
1 1 Durant
1 2 Lebron
1 3 Dirk
¿Es posible escribir una consulta de selección de una manera tal como:
SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN ((1,1), (1,2) and (1,3))?
Si hay una manera de escribir el SQL similar al anterior, me gustaría saber. ¿Hay alguna manera de especificar valores para una cláusula IN que represente varias filas como se ilustra?
Estoy usando DB2.
Con las claves primarias compuestas, concatenaría las dos ID y uniría las cadenas compuestas.
select id1 + id2 as FullKey, *
from players
where FullKey in (''11'',''12'',''13'')
(Si los identificadores no son cadenas, simplemente conviértelos como tales).
Este tipo de consulta funciona en DB2.
SELECT * FROM A
WHERE (C1, C2) IN (SELECT B1, B2 FROM B WHERE B3=1);
Esto funciona en mi DB2 (versión 9.7 en Linux / Unix / Windows) usando esta sintaxis:
SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN (VALUES (1,1), (1,2), (1,3))
Esta sintaxis no funcionará en DB2 en el Mainframe (al menos en la versión 9.1) porque no puede sustituir una subselección con una expresión VALUES. Esta sintaxis funcionará:
SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN (SELECT 1, 1 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 1, 2 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 1, 3 FROM SYSIBM.SYSDUMMY1)
SELECT * FROM <your table> where (<field1>, <field2>, ...) in (SELECT <field1>, <field2>, ... FROM <your table> where <your condition>)
Esto funcionó de maravilla para mí.