首页 > 解决方案 > 如何在同一列上找到具有多个不同值的结果?

问题描述

想象一下,我们有一个带有日志表和类型表的数据库。我想做一个查询,以确定 UserX 是否有某些类型的日志的条目。假设 UserX 已登录type_1and type_2,但未登录type_3。我想写一个简单的查询来看看这是对还是错。

起初我尝试了类似的东西:

SELECT * FROM logs AS l
INNER JOIN types AS t
ON t.id = l.type_id
WHERE t.name = "type_1"
AND t.name = "type_2"
AND t.name != "type_3";

但我很快意识到不可能这样做,因为t.name不能有多个值。我现在尝试了很多不同的方法,但似乎找不到适合我的方法。我确定解决方案相当简单,只是目前我还没有看到。

希望有人能指出我正确的方向。

我在这个小提琴中制作了一个简单的测试数据库,用于测试和示例:https ://www.db-fiddle.com/f/nA6iKgCcJwKnXKsxaNvsLt/0

标签: mysqlsqldatabase

解决方案


一种带有条件聚合的选项。

SELECT l.userID
FROM logs AS l
JOIN types AS t ON t.id = l.type_id
GROUP BY l.userID
HAVING COUNT(DISTINCT CASE WHEN t.name IN ('type_1','type_2') THEN t.name END) = 2
AND COUNT(DISTINCT CASE WHEN t.name = 'type_3' THEN t.name END) = 0

推荐阅读