我对使用select
运算符的in
语句查询有疑问。也就是说,如果我需要根据它们的到期值来获得多个po值。如果我这样做,
select * from table1 where pono in('82200388180','82200388179') and dueno in('001','004')
然后它的工作原理。但我需要向你澄清一点。假设我这样做,
从table1中选择*其中pono in('82200388180','82200388179')和dueno('001','004')
(一个PO可以有多个到期号。没有什么是唯一的)
它是如何工作的?是否 1.它返回没有001可用的行 要么 2.it返回与pono = 82200388180对应的行,dueno = 001。
我需要得到选项2的答案。请指导我
提前致谢。
答案 0 :(得分:2)
如何根据相应的到期值获得正确的po值 号
in
子句中的位置之间没有相关性。
这可能会给你你想要的结果。
select *
from table1
where pono = '1' and dueno = '001' or
pono = '2' and dueno = '001'
或者你可以有一个表/临时表/表变量,其值对使用exists
进行检查,或者如果你在SQL Server 2008中,你可以这样做。
select *
from table1 as T1
where exists (
select *
from (values('1','001'),
('2','001')) as T(pono, dueno)
where T1.pono = T.pono and
T1.dueno = T.dueno
)
如果您使用PostgreSQL,则可以使用此代码:
select *
from table1
where (pono, dueno) in (('1', '001'), ('2', '001'))
答案 1 :(得分:0)
通常你会做这样的事情:
select * from table1 where pono in('1','2') and dueno = pono
但在你的情况下,pono和dueno是不同的格式,所以你不能直接比较。做
没有区别(或优势)select * from table1 where pono in('1','2') and dueno in('001','001')
与
相比select * from table1 where pono in('1','2') and dueno ='001'