我需要从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的所有记录。我该怎么做?
发布于 2013-03-11 21:40:47
这个问题在某种程度上称为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.userIDhttps://stackoverflow.com/questions/15340064
复制相似问题