原始问题如下:
Where A=1 AND A=2 returns 0 row problem - (Short Mysql question)
感谢您提供一些有用的答案。 (但很快我意识到我可能过度简化了问题)
实际上真正的问题如下:
Tag 1,2,3 - category A
Tag 4,5,6 - category B
Tag 7,8,9 - category C
我想为同一类别实现“OR条件”,但为不同类别实现“AND条件”。 所以我可能想要返回类似
的内容-- I want id with Tag 1,4 or 1,2,4 but not 4
SELECT id FROM table WHERE Tag IN (1,2) AND Tag (4)
-- Tag 1,4 or 1,5 but not 1
SELECT id FROM table WHERE Tag IN (1) AND Tag (4,5)
-- Only Tag 1,4,9
SELECT id FROM table WHERE Tag IN (1) AND Tag (4) AND Tag (9)
我想从答案中找出答案,但任何快速指南都将不胜感激!
答案 0 :(得分:1)
听起来你想要那些用给定标签id标记的类别(只有那些用所有给定标签ID标记的类别):
Select id from Table
WHERE tag in (A,B,C)
Group by id
Having count(id)>=3
答案 1 :(得分:1)
根据我的理解,您希望返回至少标记为2个不同类别的ID,请尝试以下操作:
Select id from Table
WHERE tag_category in (A,B,C)
Group by id
Having count(distinct tag_category) >= 2
答案 2 :(得分:0)
听起来你有'必须'的条件,但你只想选择你的可选列表中的那些。
试试这个:
SELECT id from Table
WHERE Tag IN (1,2)
AND EXISTS (SELECT 1 FROM Table WHERE Tag=4)
目前尚不清楚您的源数据是什么样的。你能说清楚吗?
答案 3 :(得分:0)
这与我之前的问题的答案基本相同。
区别在于HAVING
子句。它现在为每个标签组分配不同的编号。因此id in (1,2)
的编号为1
。 else
子句适用于代码编号4
,这些代码的编号为2
。然后,它会计算id
的不同标记组编号的数量,并且仅返回计数为2的id
,这意味着两个标记组都存在。
SELECT id
FROM table
WHERE Tag in (1,2,4)
GROUP BY id
HAVING COUNT(DISTINCT CASE WHEN Tag in (1,2) THEN 1 ELSE 2 END) = 2