mysql - 搜索词有多个值时的Mysql SELECT
问题描述
我正在尝试从下表(摘录)中选择所有 user_id,其中 product_id '3' 根本与 user_id 无关。
user_id product_id status terms_id
100 3 1 10
100 22 0 0
100 402 0 20
101 22 1 10
101 68 1 0
101 120 1 20
201 22 0 0
201 3 1 10
在此示例中,应仅选择 user_id 101,因为它根本没有 product_id 3。每个 user_id 可以有多个条目。
我尝试了以下方法,但它错误地选择了所有 user_id
SELECT distinct user_id FROM table WHERE product_id <> 3
我怎么能做到这一点?实际表有超过 350 万行。谢谢!
解决方案
您可以使用NOT EXISTS
子查询来检查用户是否没有关联的行product_id = 3
:
SELECT DISTINCT user_id
FROM `table` t1
WHERE NOT EXISTS (SELECT * FROM `table` t2 WHERE t2.user_id = t1.user_id AND t2.product_id = 3)
输出
101
另一种解决方案是GROUP BY user_id
断言行数product_id = 3
为 0:
SELECT user_id
FROM `table`
GROUP BY user_id
HAVING SUM(product_id = 3) = 0