gpt4 book ai didi

sql - 如何找到购买了一种产品但不购买另一种产品的人?

转载 作者:行者123 更新时间:2023-12-04 06:18:42 24 4
gpt4 key购买 nike

我有一个表格将客户与之前的购买联系起来:

RecID   CustID   ProdID
1 20 105
2 20 300
3 31 105
4 45 105
5 45 300
6 45 312

我想获取购买项目 105 的客户 ID 列表,但除了第 300 项之外没有。

在这种情况下,CustID 31。

我似乎无法使用选择和连接来做到这一点。我被难住了!

我非常感谢有经验的 SQL 人员的帮助。

谢谢!


谢谢!

我是问题的原作者。

Mark Byers 使用 NOT IN 的第二个示例效果很好! (这个对我有用后我没有尝试其他人)。

他的第一个 LEFT JOIN 示例没有返回任何 CustID...我认为我正确复制了它并使用了正确的表名和列名。所以我不知道为什么它对我不起作用。

再次感谢所有愿意花时间为我写一些 SQL 的人。

我必须创建一个新帐户才能发表评论(我无法使用我昨天创建的帐户登录,并且密码恢复说​​找不到我)

最佳答案

有三种常见的方法。这是一种 LEFT JOIN 方法:

SELECT T1.CustID
FROM yourtable T1
LEFT JOIN yourtable T2 ON T1.CustID = T2.CustID AND T2.ProdId = 300
WHERE T1.ProdId = 105
AND T2.ProdId IS NULL

这里不在:

SELECT CustID
FROM yourtable
WHERE ProdId = 105
AND CustID NOT IN
(
SELECT CustID
FROM yourtable
WHERE ProdId = 300
)

或者你可以使用不存在:

SELECT CustID
FROM yourtable T1
WHERE ProdId = 105
AND NOT EXISTS
(
SELECT NULL
FROM yourtable T2
WHERE T2.ProdId = 300
AND T2.CustID = T1.CustID
)

哪个性能更好取决于您使用的数据库和版本。


对于 SQL Server,最好使用 NOT IN 或 NOT EXISTS:

In SQL Server, NOT EXISTS and NOT IN predicates are the best way to search for missing values, as long as both columns in question are NOT NULL. They produce the safe efficient plans with some kind of an Anti Join.

LEFT JOIN / IS NULL is less efficient, since it makes no attempt to skip the already matched values in the right table, returning all results and filtering them out instead.

来源:

关于sql - 如何找到购买了一种产品但不购买另一种产品的人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3688839/

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