次のようなプレイヤーと呼ばれるテーブルがあります。
First_Id Second_Id Name
1 1 Durant
2 1 Kobe
1 2 Lebron
2 2 Dwight
1 3 Dirk
このテーブルにselectステートメントを記述して、最初のIDと2番目のIDが指定された最初と2番目のIDの束に一致するすべての行を取得したいと思います。
したがって、たとえば、最初と2番目のIDが(1,1)、(1,2)、および(1,3)であるすべての行を選択したいとします。これにより、次の3行が取得されます。
First_Id Second_Id Name
1 1 Durant
1 2 Lebron
1 3 Dirk
次のような方法で選択クエリを書くことは可能ですか?
SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN ((1,1), (1,2) and (1,3))?
上記のようなSQLを作成する方法があれば、知りたいと思います。図のように複数の行を表すIN句の値を指定する方法はありますか。
DB2を使用しています。
これは、次の構文を使用して、DB2(Linux/Unix/Windows上のバージョン9.7)で機能します。
SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN (VALUES (1,1), (1,2), (1,3))
この構文は、サブフレームをVALUES式で置き換えることができないため、メインフレーム上のDB2では機能しません(少なくともバージョン9.1では)。この構文は機能します:
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)
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);
複合主キーでは、2つのIDを連結し、複合文字列に一致します。
select id1 + id2 as FullKey, *
from players
where FullKey in ('11','12','13')
(IDが文字列ではない場合、単にそのようにキャストします。)
SELECT * FROM <your table> where (<field1>, <field2>, ...) in (SELECT <field1>, <field2>, ... FROM <your table> where <your condition>)
これは私にとって不思議に働いた。
このタイプのクエリはDB2で機能します。
SELECT * FROM A
WHERE (C1, C2) IN (SELECT B1, B2 FROM B WHERE B3=1);