我的下表(id, Tag)
包含以下值
(1, 17)
(1, 31)
(2, 17)
(3, 31)
当我查询以下内容时
"SELECT id FROM table WHERE 1 AND Tag=17 AND Tag=31"
我希望它返回(id)
(1)
但事实并非如此。 (返回0行)
这里有什么问题?
答案 0 :(得分:11)
对于任何特定行,标记不能同时为17和31. You need
SELECT id
FROM table
WHERE Tag in (17, 31)
GROUP BY id
HAVING COUNT(DISTINCT Tag) = 2
答案 1 :(得分:2)
机器是逻辑的,按照你要求他们做的......在这种情况下你的期望是错误的。
标签17和标签31根据boolean math的条件应同时满足以产生结果。
答案 2 :(得分:0)
您要求同时使用Tag为17和31的值的行。你可能想要这个(另外,WHERE 1
是不需要的):
SELECT DISTINCT id FROM table WHERE Tag=17 OR Tag=31
编辑:在阅读了其他一些答案后,我决定对此发疯。
SELECT A.id
FROM table A JOIN table B ON A.id = B.id
WHERE A.Tag=17 AND B.Tag=31;