35

我有一张名为 player 的桌子,如下所示:

First_Id    Second_Id     Name
1           1             Durant
2           1             Kobe
1           2             Lebron
2           2             Dwight
1           3             Dirk

我希望在该表上编写一个 select 语句来检索其第一个 id 和第二个 id 与一组指定的第一个和第二个 id 匹配的所有行。

因此,例如,我希望选择第一个和第二个 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。

4

6 回答 6

40

这适用于我的 DB2(Linux/Unix/Windows 上的 9.7 版),使用以下语法:

SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN (VALUES (1,1), (1,2), (1,3))

此语法不适用于 Mainframe 上的 DB2(至少在 9.1 版中),因为您不能用 VALUES 表达式替换子选择。此语法将起作用:

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)
于 2012-05-23T18:45:14.650 回答
5

这是 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);
于 2012-06-05T16:05:02.637 回答
2

使用复合主键,我将连接两个 id 并匹配复合字符串。

select id1 + id2 as FullKey, *
from players
where FullKey in ('11','12','13')

(如果 id 不是字符串,只需将它们转换为此类。)

于 2012-05-23T19:08:27.773 回答
1

此语法适用于 MySQL:

SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN ((1,1), (1,2), (1,3))
于 2021-02-17T14:22:01.580 回答
1
SELECT * FROM <your table> where (<field1>, <field2>, ...) in (SELECT <field1>, <field2>, ... FROM <your table> where <your condition>)

这对我来说很神奇。

于 2018-08-28T07:22:15.847 回答
0

这种类型的查询适用于 DB2。

SELECT * FROM A
WHERE (C1, C2) IN (SELECT B1, B2 FROM B WHERE B3=1);
于 2016-01-13T17:18:51.900 回答