SQL“IN”运算符

时间:2013-05-24 05:58:43

标签: sql

我对使用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的答案。请指导我

提前致谢。

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'