sql - 使用 in 子句按字段对选择查询

标签 sql database db2 in-clause

我有一个名为 players 的表,如下所示:

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。

最佳答案

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

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

此语法不适用于大型机上的 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)

关于sql - 使用 in 子句按字段对选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725901/

相关文章:

c# - 从 DB2 数据库生成 EDMX

sql - SQL语法错误以外部方式创建过程

ruby-on-rails - 数据库 - 动态表选择

javascript - Express JS 的目录困惑

database - 限制与另一列条目相关的重复条目

java - DB2 和 Jasper 报告中的 COALESCE 问题

c++ - DB2 用户定义函数和自定义模式

c# - 在C#中回滚linq2sql插入事务的问题

sql - 如何改进此 SQL 代码?

sql - 在 FULL OUTER JOIN 中计算 DISTINCT