我在尝试为我创建的这个简单数据库开发查询时遇到问题。它收集了由代码(CODICEFORNITORE)标识的3个供应商,该供应商销售电话或谷物等产品,每个供应商均由另一个代码(CODICEPRODOTTO)标识。我要完成的工作是找回不出售任何Apple产品的供应商数量。通过称为目录(CATALOGO)的第三张表,可以跟踪产品与其供应商之间的关联。
我认为最好的方法是在PRODUCT TABLE和CATALOG TABLE之间进行EQUI JOIN,然后尝试计算供应商销售的Apple产品数量,然后排除那些数量小于或等于0的产品。但是,我无法成功创建这样的查询。 在计算有多少供应商出售Apple产品方面,我没有问题。
实现相反的过程非常简单(而且我敢肯定,即使是更简单的方式,我也可以做到):
SELECT COUNT(CODICEFORNITORE) AS NUMERO_FORNITORI_APPLE --- This the number of apple supplier
FROM CATALOGO C JOIN PRODOTTI P ON C.CODICEPRODOTTO = P.CODICEPRODOTTO
GROUP BY CODICEFORNITORE, MARCA
HAVING Marca = 'Apple';
--- this returns 1 as expected ---
我要实现的目标应根据下表返回“ 2”
预先感谢,对不起英语不好
答案 0 :(得分:1)
您可以使用以下方法获取至少提供一种产品而没有Apple产品的供应商清单:
SELECT CODICEFORNITORE
FROM CATALOGO C JOIN
PRODOTTI P
ON C.CODICEPRODOTTO = P.CODICEPRODOTTO
GROUP BY CODICEFORNITORE
HAVING SUM(CASE WHEN Marca = 'Apple' THEN 1 ELSE 0 END) = 0;
您可以使用子查询获取计数:
SELECT COUNT(*)
FROM (SELECT CODICEFORNITORE
FROM CATALOGO C JOIN
PRODOTTI P
ON C.CODICEPRODOTTO = P.CODICEPRODOTTO
GROUP BY CODICEFORNITORE
HAVING SUM(CASE WHEN Marca = 'Apple' THEN 1 ELSE 0 END) = 0
) c;
或者,如果您有供应商表,则可以使用NOT EXISTS
:
SELECT COUNT(*)
FROM FORNITORE F
WHERE NOT EXISTS (SELECT 1
FROM CATALOGO C JOIN
PRODOTTI P
ON C.CODICEPRODOTTO = P.CODICEPRODOTTO
WHERE F.CODICEFORNITORE = C.FORNITORE AND
P.Marca = 'Apple'
);