mysql - 如果同一 user_id 存在值,则选择记录

标签 mysql sql select relational-division

我需要从 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/

相关文章:

mysql - SQL 查询为每个用户提供唯一字段和计数

javascript - 下拉菜单中改变线宽

mysql - 如果第一个parent_id级别> 1而不是id级别,则生成值为1的列

mysql - 我需要实现多个选项,但在 mysql 中只有一个正确答案

mysql - 使用 SQL 的返回值作为另一个查询中的参数

mysql - 如何在sql中选择超过2列的计数

mysql - 为什么mysql服务器时间不对?

MySQL Sum positive and negative - 计算货币交易的确切总数

mysql - mysqli 中查询结果错误

mysql - 多个 SELECT 语句的正确 mySQL 语法?