取出这样一些供应商代号,它们能够

img

.取出这样一些供应商代号,它们能够提供至少一种由红色零件的供应商提供的零件;
SELECT DISTINCT SPJB.SN
FROM PB,SPJB
WHERE SPJB.PN IN
(SELECT SPJB.PN
FROM SPJB,SB,PB
WHERE SB.SN=SPJB.SN AND PB.PN=SPJB.PN AND PB.COLOR=’红’)

这个SQL语句和这个exists语句写表达的意思一样吗SELECT SN FROM SB WHERE NOT EXISTS (SELECT * FROM PB WHERE COLOR = '' AND NOT EXISTS (SELECT * FROM SPJ WHERE SPJ.SN = SB.SN AND PB.PN = SPJ.PN))
不对的话是不可以这样使用还是说哪里语法错误了

两个最终效果都是一样的,一个用子查询获取具有红色零件的零件号,外层查询中使用IN筛选出供应商代号。一个嵌套了两个NOT EXISTS子查询检查是否存在不满足条件的记录。但是实际work中,都采用第一种,执行效率高点