1

我需要从 mysql 数据库中获取记录;在此表中有一个与用户关联的操作列表。我需要获取所有具有列操作 = 3 和列操作 = 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 的记录,即使用户没有这两个值。我该怎么办?

4

1 回答 1

4

这个问题有点叫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
于 2013-03-11T13:40:47.200 回答