首页 > 解决方案 > 搜索词有多个值时的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 万行。谢谢!

标签: mysql

解决方案


您可以使用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

dbfiddle 上的演示

另一种解决方案是GROUP BY user_id断言行数product_id = 3为 0:

SELECT user_id
FROM `table`
GROUP BY user_id
HAVING SUM(product_id = 3) = 0

dbfiddle 上的演示


推荐阅读