Sql 基于多个WHERE条件选择行

Sql 基于多个WHERE条件选择行,sql,toad,Sql,Toad,我想从表PROD中收集有关包含特定三元组值的行的所有详细信息。例如,我想获取具有列(ID、NBR和copu I)的行上的所有数据,这些列的值分别为(23534、99、0232)和(3423、509384),等等。我尝试了版本1,但当我知道需要有100行并且版本2出现错误时,它只提供了两行数据。我想不出别的办法来做这件事 第1版: SELECT * FROM PROD WHERE ID IN (2534, 3423) AND NBR IN (99, 5) AND COP_I IN (0

我想从表
PROD
中收集有关包含特定三元组值的行的所有详细信息。例如,我想获取具有列(
ID
NBR
copu I
)的行上的所有数据,这些列的值分别为(23534、99、0232)和(3423、509384),等等。我尝试了版本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,509384)三胞胎的那一排。基本上,只有一些三元组的行出现在结果中,结果与我从上面的版本1中得到的结果相同


谢谢

我认为你应该使用
条件

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

我认为你应该使用
条件

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

您的第二个查询进行得很顺利,只是需要将
替换为
,将
s替换为
s

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

您的第二个查询进行得很顺利,只是需要将
替换为
,将
s替换为
s

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

您可以使用如下查询:

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

您可以使用如下查询:

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

根据需要使用多少对值以及您的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
SELECT * FROM PROD 
WHERE ( id, nbr, cop_i ) IN ( ('23534','99','0232'), ('3423','5','09384') );

根据需要使用多少对值以及您的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
SELECT * FROM PROD 
WHERE ( id, nbr, cop_i ) IN ( ('23534','99','0232'), ('3423','5','09384') );

您可以这样指定三元组:

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
SELECT * FROM PROD 
WHERE ( id, nbr, cop_i ) IN ( ('23534','99','0232'), ('3423','5','09384') );

您可以这样指定三元组:

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
SELECT * FROM PROD 
WHERE ( id, nbr, cop_i ) IN ( ('23534','99','0232'), ('3423','5','09384') );


我遇到了一个最奇怪的问题,其中许多对应于特定三胞胎的行并没有出现。你能想一想为什么会这样吗?@Jojo你确定数据是你认为的吗?对不起,我不太确定你这个问题的意思。@Jojo我想问的是表中是否包含与查询匹配的数据。查看您问题中的更新,为什么您希望通过查找ID
3423
的查询返回ID
2534
的行?对不起,这是我在复制时遇到的问题。我已经更新了这个。我遇到了一个最奇怪的问题,其中很多对应于特定三元组的行都没有显示出来。你能想一想为什么会这样吗?@Jojo你确定数据是你认为的吗?对不起,我不太确定你这个问题的意思。@Jojo我想问的是表中是否包含与查询匹配的数据。查看您问题中的更新,为什么您希望通过查找ID
3423
的查询返回ID
2534
的行?对不起,这是我在复制时遇到的问题。我已经更新了。谢谢,但是这个答案似乎有错误。嗯。我在甲骨文公司试用过,效果很好。您使用的是什么RDBMS?谢谢,但是这个答案似乎抛出了一个错误。Hmmm。我在甲骨文公司试用过,效果很好。您使用的是什么RDBMS?我似乎得到的结果与我在问题中使用“版本1”时得到的结果相同。你知道为什么这个查询不起作用吗?一些示例数据和预期结果会有所帮助。我添加了一些示例数据,并进一步解释了我的预期结果。我似乎得到了与我在问题中使用“版本1”时得到的结果相同的结果。你知道为什么这个查询不起作用吗?一些示例数据和预期结果会有所帮助。我添加了一些示例数据,并进一步解释了我的预期结果。