SQL查询,其中每个产品都有人请求

时间:2017-11-19 15:19:47

标签: sql-server

我有一个快捷查询,我只计算了产品的总数,并使用了计数来显示该人已经请求了许多产品。 (这是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

1 个答案:

答案 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子句中的逗号。相反,我在三个表之间使用显式连接。