如何在DB2中的多个列上进行批量选择,所以:
Select * from randomTable where (col1, col2) in ((1,3),(2,4))
以上查询适用于HSQLDB。 注意
Select * from randomTable where col1 in (1,2) and col2 in (3,4)
不正确,因为(1,2)和(3,4)没问题,但(1,4)不正常。
col1
和col2
的组合也恰好是主键。
这样做而不是单独的select语句的原因是为了避免数据库往返。
答案 0 :(得分:1)
您可以使用标准SQL:
where (col1 = 1 and col2 = 3) or
(col1 = 2 and col2 = 4)
答案 1 :(得分:0)
还有两个选择:
SELECT * FROM randomTable r, TABLE (VALUES (1,3),(2,4)) AS t (col1, col2)
WHERE (r.col1, r.col2) = (t.col1, t.col2)
您也可以在此处使用JOIN
语法。与CTE相同:
WITH t (col1, col2) AS (
VALUES (1,3),(2,4)
)
SELECT * FROM randomTable r INNER JOIN t ON (r.col1, r.col2) = (t.col1, t.col2)
我认为这是所有标准SQL,但并非所有数据库系统都支持它。
答案 2 :(得分:0)
如果你可以将你的配对引入某种类型的表引用,那么你可以加入它们。
我设置了一个这样的测试表:
create table qtemp.randomData
(col1 smallint
,col2 smallint
,info varchar(20)
);
insert into randomData
values
(1, 2, 'First'),
(1, 4, 'second'),
(3, 2, 'third'),
(3, 4, 'Fourth'),
(4, 4, 'fifth');
然后我把我的对选择放在一个公用表表达式[CTE]
中with p (x,y) as
(values (1,2), (3,4)
)
select d.*
from randomData d
join p
on (col1,col2)=(x,y)
;
哪个给出了
col1 col2 info
---- ---- --------------------
1 2 First
3 4 Fourth
但更常见的是,我会处理一大堆密钥,我会放在另一个表中加入。