-3

我对select带有运算符的语句查询有疑问in。也就是说,如果我需要根据它们的到期编号获取多个 po 值。如果我这样做,

select * from table1 where pono in('82200388180','82200388179') and dueno in('001','004')

然后它工作。但我需要向你澄清一点。假设如果我这样给予,

select * from table1 where pono in('82200388180','82200388179') and Dueno ('001','004')

(一个采购订单可以有多个到期编号。没有什么是唯一的)

这个怎么运作?是 1. 它返回到期没有 001 可用的行还是 2. 它返回对应于 pono=82200388180 且 Dueno=001 的行。

我需要得到类似选项2的答案。请指导我

提前致谢。

4

2 回答 2

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'))
于 2013-05-24T06:14:33.997 回答
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'
于 2013-05-24T06:08:43.697 回答