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