我有这张桌子

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/

10-10 11:14
查看更多