1

我很难在 mysql 中实现以下 SQL 查询。

我试图找到每个只提供绿色零件的供应商,打印供应商的名称和她提供的零件总数。

我的 SQL 查询是

SELECT S.sname , count(*)
FROM Suppliers S,Parts P,Catalog C
WHERE P.pid = C.pid AND C.sid = S.sid
GROUP BY S.sname , S.sid
HAVING EVERY (P.color = 'green')

任何关于如何在 mysql 中实现它的建议将不胜感激

4

2 回答 2

2

我认为使用NOT EXISTS构造是最简单的方法:

SELECT s.sname, COUNT(*)
FROM   suppliers s
WHERE  NOT EXISTS (SELECT 1 
                   FROM   parts p
                   JOIN   catalog c ON p.pid = c.pid
                   WHERE  c.sid = s.side AND p.color != 'green')
于 2013-11-13T05:27:20.387 回答
0

如果您使用HAVING聚合函数本身进行比较,则使用。也JOIN不要使用老式的多表逗号分隔,因为这可能会产生意想不到的后果。

SELECT S.sname , count(*) as TotalParts
FROM Suppliers S
INNER JOIN Catalog C
ON S.sid = C.sid
INNER JOIN Parts P
ON P.pid = C.pid
WHERE   P.color = 'green'
GROUP BY S.sname
于 2013-11-13T05:29:00.753 回答