我该怎么做这个SQL SELECT语句?

时间:2011-01-17 19:08:49

标签: sql mysql select

我有一张叫做SPJ的桌子,里面有SNo,PNo,JNo和Quantity。 SQL语句问题是:

获取供应零件P3的供应商的供应商数量,但不提供零件P5。

现在我确定这应该很简单,但我无法让它返回正确的结果!

它应该只返回“S3”,因为它们是唯一提供第3部分而不是5的部分,但它总是返回供应两者的供应商数量,无论NOT的哪种组合,<>使用等。

3 个答案:

答案 0 :(得分:3)

SELECT  sno
FROM    (
        SELECT  DISTINCT sno
        FROM    spj
        WHERE   pno = 3
        ) q
WHERE   sno NOT IN
        (
        SELECT  sno
        FROM    spj
        WHERE   pno = 5
        )

答案 1 :(得分:0)

查找EXCEPT子句。

这是一个两步的事情。您需要编译第3部分的列表,并为第5部分单独列出,然后将其删除。 EXCEPT子句是执行此操作的一种方法。或者你可以使用“哪里不存在”

答案 2 :(得分:0)

select distinct sno  # distinct in case of duplicates
from spj A
left join spj B on A.sno = B.sno and B.pno = 5  # same supplier supplies part 5
where A.pno = 3  # supplies part 3
  and B.sno is null  # no match on left join