【问题标题】:SQL "IN" Operator [closed]SQL“IN”运算符[关闭]
【发布时间】:2013-05-19 16:10:39
【问题描述】:

我对带有in 运算符的select 语句查询有疑问。也就是说,如果我需要根据它们的到期编号获取多个 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')

(一个 PO 可以有多个到期编号。没有什么是唯一的)

它是如何工作的?无论 1. 它返回由于没有 001 可用的行 要么 2.返回pono=82200388180对应的行,dueno=001。

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

提前致谢。

【问题讨论】:

  • 如果我理解正确,您想删除pono 可以是1 and 2 但dueno 应该等于001 的记录?
  • 我不确定你到底要什么。第二个查询看起来很好。即使数字都相同,它仍然应该工作 - 它仍然只会从 table1 返回具有给定 dueno 集的行(即使该集只包含“001”)
  • 举一个你想要的输入输出的例子。你的问题不清楚。
  • ponodueno有什么关系?一个 pono 对应于单个 Dueno(即一对一映射)还是一对多?请澄清
  • 这是什么 DBMS? (甲骨文、MySQL、SQL Server ...)

标签: sql


【解决方案1】:

我怎样才能根据相应的到期获得正确的 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'))

【讨论】:

  • 括号在第一个查询中会很方便吗?
  • @DavidAldridge 当然他们不会受到伤害,他们会澄清 where 子句的作用,但如果你把它们放在正确的位置,它们不会改变输出,因为 and 的优先级高于 or .
【解决方案2】:

通常你会这样做:

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'

【讨论】:

  • 但我应该将多个 pono 与多个 dueno 的朋友匹配.. 我该怎么做
  • 那我真的不明白你在问什么。请编辑问题以提供示例数据表并显示您正在寻找的结果。
  • 我已经修改了我的问题.. 请查看并告诉我朋友
  • 您没有提供示例数据或所需的输出。有关如何使用示例数据和输出清楚地解释的示例,请参阅 this answer 到另一个问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-21
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多