subconsultas inner ejemplos datos consultas complejas sql database db2 in-clause

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í.