在DB2中的多个列上进行批处理选择

时间:2014-06-11 22:15:11

标签: sql db2

如何在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)不正常。

col1col2的组合也恰好是主键。

这样做而不是单独的select语句的原因是为了避免数据库往返。

3 个答案:

答案 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  

但更常见的是,我会处理一大堆密钥,我会放在另一个表中加入。