我有一张叫做SPJ的桌子,里面有SNo,PNo,JNo和Quantity。 SQL语句问题是:
获取供应零件P3的供应商的供应商数量,但不提供零件P5。
现在我确定这应该很简单,但我无法让它返回正确的结果!
它应该只返回“S3”,因为它们是唯一提供第3部分而不是5的部分,但它总是返回供应两者的供应商数量,无论NOT的哪种组合,<>使用等。
答案 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