我有一个快捷查询,我只计算了产品的总数,并使用了计数来显示该人已经请求了许多产品。 (这是8个产品)
我想知道是否有一种更简单的方法,我不需要自己计算产品并让查询这样做。基本上,将8替换为数据库所具有的产品总量。
SELECT DISTINCT
Tb_Consumer.Name
FROM
Tb_Consumer, Tb_Product, Tb_Requests
WHERE
Tb_Consumer.Con_ID = Tb_Requests.Con_ID
AND Tb_Requests.Prod_ID = Tb_Product.Prod_ID
GROUP BY
Tb_Consumer.Name
HAVING
COUNT(Tb_Product.Name) = 8
答案 0 :(得分:0)
使用子查询查找Tb_Product
表中的产品数量:
SELECT
tbc.Name
FROM Tb_Consumer tbc
INNER JOIN Tb_Request tbr
ON tbc.Con_ID = tbr.Con_ID
INNER JOIN Tb_Product tbp
ON tbr.Prod_ID = tbp.Prod_ID
GROUP BY
tbc.Name
HAVING
COUNT(tbp.Name) = (SELECT COUNT(*) FROM Tb_Product); -- count products here
这假设Tb_Product
中的每条记录都对应一个唯一的产品。如果由于某种原因可能存在重复,那么您可以计算不同的产品,例如
(SELECT COUNT(DISTINCT Name) FROM Tb_Product)
我做的其他更改包括从select子句中删除DISTINCT
,因为GROUP BY
应该已经使每个名称都不同。我还重构了您的查询以删除FROM
子句中的逗号。相反,我在三个表之间使用显式连接。