如何在mysql中实现SQL查询?

如何在mysql中实现SQL查询?,mysql,sql,database,database-design,relational-database,Mysql,Sql,Database,Database Design,Relational Database,我很难在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中实现该功能的建议都将受到

我很难在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中实现该功能的建议都将受到极大的欢迎

我认为使用
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')

如果使用聚合函数本身进行比较,则使用
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

例如,如果某个供应商有一些红色零件,您仍将获得该供应商的计数。