根据多个WHERE条件选择行

时间:2016-07-08 16:41:25

标签: sql toad

我想收集表PROD中有关包含特定三元组值的行的所有详细信息。例如,我想获取包含值(IDNBRCOP_I)的行的所有数据,其值为(23534,99,0232)和(3423,5,09384) )等我试过版本1,但是当我知道需要100和版本2遇到错误时它只给了我几行。我无法想到任何其他方式来做到这一点。

版本1:

SELECT * FROM PROD

WHERE 

ID IN (2534, 3423) 

AND NBR IN (99, 5)

AND COP_I IN (0232, 09384)  

第2版:

SELECT * FROM PROD

WHERE 

    (ID = '23534',  NBR ='99',  COP_I ='0232'),
AND (ID = '3423',   NBR ='5',   COP_I ='09384')

更新

我目前得到的结果如下:

ID     NBR_IN   COP_I  FLAG  TYPE     DATE 
23534  99       0232   0     CATHAY   15-04-2017

并且最终不会获得(3423,5,09384)三联排。基本上,只有部分三元组的行出现在结果中,结果与我从上面的版本1获得的结果相同。

谢谢

5 个答案:

答案 0 :(得分:1)

我认为你应该使用OR条件。

SELECT * FROM PROD
WHERE (ID = '23534' AND  NBR ='99' AND COP_I ='0232')
OR (ID = '3423' AND NBR ='5' AND COP_I ='09384')

答案 1 :(得分:1)

您的第二个查询是沿着正确的轨道进行的,除非您需要将AND替换为OR,将,替换为AND s。

SELECT * 
FROM PROD
WHERE 
    (ID = '23534' AND NBR ='99' AND COP_I = '0232')
OR 
    (ID = '3423' AND  NBR ='5' AND COP_I = '09384')

答案 2 :(得分:1)

您可以像这样指定三元组:

SELECT * FROM PROD 
WHERE ( id, nbr, cop_i ) IN ( ('23534','99','0232'), ('3423','5','09384') );

答案 3 :(得分:0)

您可以使用如下查询:

SELECT p.* 
FROM PROD AS p
INNER JOIN (
   SELECT 23534 AS col1, 99 AS col2, 232 AS col3 UNION ALL
   SELECT 3423,          5,          9384
) AS t ON p.ID = t.col1 AND p.NBR = t.col2 AND p.COP_I = t.col3

答案 4 :(得分:0)

取决于您可能需要执行多少对值,以及您的RDBMS,您可以执行以下操作:

create table #tempThingy (ID int, NBR int, COP_I int)

insert into #tempThingy (id, nbr, cop_i) 
select 23534, 99, 0232
union all select 3423, 5, 09384

select   *
from prod p
inner join #tempThingy t on p.id = t.id
    and p.nbr = t.nbr
    and p.cop_i = t.cop_i