SQL - 同一列上的不同条件
SQL - Different conditions on the same column
我正在尝试实现与
非常相似的东西
区别在于我想要两个单独的WHERE条件:
WHERE tag_id IN (1,2)
OR tag_id IN (3,2)
GROUP BY other_id HAVING COUNT(tag_id) = 2
这为我提供了我需要的所有记录,而且还为我提供了具有标签 1 或 3 的记录,即使该记录没有 tag_id = 2
。我知道我的问题出在 OR
条件下,因为如果我分别执行 (1,2)
和 (3,2)
,我会得到每个查询的预期结果。
我错过了什么?
您可以使用:
SELECT other_id
FROM yourTable
GROUP BY other_id
HAVING COUNT(tag_id) = 2 AND -- 2 tags
(SUM(tag_id NOT IN (1, 2)) = 0 OR -- either (1, 2)
SUM(tag_id NOT IN (3, 2)) = 0); -- or (3, 2)
我正在尝试实现与
区别在于我想要两个单独的WHERE条件:
WHERE tag_id IN (1,2)
OR tag_id IN (3,2)
GROUP BY other_id HAVING COUNT(tag_id) = 2
这为我提供了我需要的所有记录,而且还为我提供了具有标签 1 或 3 的记录,即使该记录没有 tag_id = 2
。我知道我的问题出在 OR
条件下,因为如果我分别执行 (1,2)
和 (3,2)
,我会得到每个查询的预期结果。
我错过了什么?
您可以使用:
SELECT other_id
FROM yourTable
GROUP BY other_id
HAVING COUNT(tag_id) = 2 AND -- 2 tags
(SUM(tag_id NOT IN (1, 2)) = 0 OR -- either (1, 2)
SUM(tag_id NOT IN (3, 2)) = 0); -- or (3, 2)