【问题标题】:How do i do this simple SQL SELECT statement?我如何执行这个简单的 SQL SELECT 语句?
【发布时间】:2010-12-09 15:40:09
【问题描述】:

我认为应该是最简单的 SQL 语句有问题,但它对我不起作用...

我有 4 个表:S、P、J 和 SPJ,其中 SPJ 基本上是将所有 ID 链接在一起的表。

现在,需要的语句是:“获取供应 P2 和 P4 部分的供应商的供应商编号。”

SELECT SNO FROM SPJ WHERE PNO = 'P2' AND PNO = 'P4'
- 不返回任何结果(这是错误的)

SELECT SNO FROM SPJ WHERE PNO = 'P2' UNION SELECT SNO FROM SPJ WHERE PNO = 'P4'
- 返回结果,加上一个只提供两者之一的额外...

我尝试了各种说法但无法弄清楚,我知道它必须很简单,但我就是看不到它......

有人有什么想法吗?

干杯

【问题讨论】:

  • 如果您提供一些示例数据和预期的结果,以及执行上述语句时返回的结果,将会对我们有所帮助@Chris
  • 不要使用 AND,因为这会导致不正确的布尔逻辑。将 AND 更改为 OR。

标签: sql select mysql phpmyadmin


【解决方案1】:

这将为您提供提供两个部件的供应商,而不是那些提供其中一个/或提供的供应商。

select sno
    from spj
    where pno in ('P2','P4')
    group by sno
    having count(distinct pno) = 2

【讨论】:

    【解决方案2】:

    或作为@Sathya 的替代品

    SELECT SNO 
    FROM SPJ 
    WHERE PNO = 'P2'
    OR PNO = 'P4'
    

    【讨论】:

      【解决方案3】:
      SELECT SNO FROM SPJ WHERE PNO in ('P2','P4')
      

      【讨论】:

      • ...澄清一下,OP 使用了AND。一条记录不能同时在PNO 中同时包含'P2''P4'。原始查询中的运算符应该是OR
      • 与第二个语句一样,这将返回一个只提供一个的结果...
      • @Chris Edwards:那是因为这个查询不排除提供 P2 和 P4 以外的东西的供应商。此要求会稍微增加复杂性。
      【解决方案4】:

      最好使用 OR

      SELECT SNO FROM SPJ WHERE PNO = 'P2' OR PNO= 'P4'
      

      【讨论】:

      • 这将返回供应商的结果,或者,我只想要两者都做的供应商......
      【解决方案5】:

      "从 SPJ 中选择 SNO,其中 PNO = 'P2' AND PNO = 'P4'"

      显然 PNO 不能同时是 P2 和 p4。 不知道数据库方案很难回答你的问题,你应该描述你的表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 1970-01-01
        • 2014-06-01
        • 1970-01-01
        相关资源
        最近更新 更多