我需要从 mysql 数据库中获取记录;在此表中有一个与用户关联的操作列表。我需要让所有具有 column action = 3 和 column action = 5 的用户;例如,如果用户 nr。 4 有一个 action = 3 的记录,另一个 action = 5 我明白了;如果用户只有一个 action = 3 或 action = 5 的记录,我不能得到它。如果我写这个查询
SELECT *
FROM user_action
WHERE action = 3 AND action = 5
我总是得到 0 条记录。如果我写 OR 而不是 AND 我得到所有具有 action = 3 或 action = 5 的记录,即使用户没有这两个值。我该怎么做?
最佳答案
这个问题有点叫Relational Division
SELECT userID
FROM user_action
WHERE action IN (3,5)
GROUP BY userID
HAVING COUNT(DISTINCT action) = 2
如果action
对于每个userID
都是唯一的,你可以直接COUNT()
记录而不用DISTINCT
SELECT userID
FROM user_action
WHERE action IN (3,5)
GROUP BY userID
HAVING COUNT(*) = 2
最后,如果你想获取用户的全部详细信息,你需要将其与自身连接起来,
SELECT a.*
FROM user_action a
INNER JOIN
(
SELECT userID
FROM user_action
WHERE action IN (3,5)
GROUP BY userID
HAVING COUNT(*) = 2
) b ON a.userID = b.userID
关于mysql - 如果同一 user_id 存在值,则选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15340064/