gpt4 book ai didi

sql - 使用 INTERSECT 的 SELECT 语句

转载 作者:行者123 更新时间:2023-12-02 08:46:29 24 4
gpt4 key购买 nike

我有两个表:包含产品列表的 tblProduct 和包含消费者名称和消费产品 ID 的 tblConsumer。现在我需要从产品表中找到消费过所有产品的消费者姓名。

我尝试使用 INTERSECT 来解决这个问题,但问题是我在 WHERE 子句中提供了每个 productid。此语法提供了我想要的结果,但我如何在不需要指定每个 productID 的情况下编写此查询。

SELECT ConsumerName  FROM tblConsumer  WHERE ProductID=  1
INTERSECT
SELECT ConsumerName FROM tblConsumer WHERE ProductID =2
INTERSECT
SELECT ConsumerName FROM tblConsumer WHERE ProductID =3


tblProduct
---------------------------------
ProductID | Product Name
---------------------------------
1 | Mango
2 | Orange
3 | Banana

tblConsumer
---------------------------------
ConsumerName | ProductID
---------------------------------
David | 1
David | 3
David | 2
Henry | 3
Henry | 2

最佳答案

如果您真的想列出 tblProducts 中的所有产品,那么您可以使用 NOT EXISTS...

否则,如果您有要检查的产品列表,您可以执行以下操作:

SELECT c.ConsumerName
FROM tblConsumer AS c
WHERE c.ProductID IN (1,2,3)
GROUP BY c.ConsumerName
HAVING COUNT(DISTINCT c.ProductID) = (SELECT COUNT(DISTINCT p.ProductID) FROM tblProduct WHERE p.ProductID IN (1,2,3))
;

但我认为您可能只想使用 NOT EXISTS 来消除没有为其购买记录的消费者。

像这样:

SELECT *
FROM tblPerson AS pn CROSS JOIN tblProduct AS pt /* Every possible combo */
WHERE NOT EXISTS (SELECT * FROM tblConsumer c
WHERE c.ConsumerName = pn.ConsumerName
AND c.ProductID = pt.ProductID)
;

关于sql - 使用 INTERSECT 的 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12135965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com