我想收集表PROD
中有关包含特定三元组值的行的所有详细信息。例如,我想获取包含值(ID
,NBR
和COP_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获得的结果相同。
谢谢
答案 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