我有这张桌子
uid | rid
-----------
1 | 4
1 | 13
2 | 4
3 | 13
我希望查询返回id,其中id=13,而rid=4,因此结果是3
到目前为止
SELECT distinct uid
FROM test
WHERE
ur.rid <> 4
AND ur.rid = 13
当然这是返回1和3
我的查询缺少了什么,只得到3个?
非常感谢。
最佳答案
您可以添加:
SELECT DISTINCT uid
FROM test t1
WHERE t1.rid = 13
AND NOT EXISTS (SELECT 1
FROM test t2
WHERE t2.uid = t1.uid
AND t2.rid = 4);
NOT EXISTS
或使用聚合:
SELECT uid
FROM test
GROUP BY uid
HAVING COUNT(CASE WHEN rid = 13 THEN 1 END) > 0
AND COUNT(CASE WHEN rid = 4 THEN 1 END) = 0;
LiveDemo
编辑(戈登):
上面的答案很好。我只是将此添加到第二个查询中作为一个简化(它似乎不适合放在单独的答案中,而且对于注释来说太长了):
SELECT uid
FROM test
GROUP BY uid
HAVING SUM(rid = 13) > 0 AND
SUM(rid = 4) = 0;
它利用了MySQL的一个很好的特性。
LiveDemo2
关于mysql - 需要简单的SQL查询帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33721192/