我有两个表一个有项,一个有标记,我想在Items表中找到每个有“foo”标记但没有标记栏的项,所以如果我要选择所有有“foo”标记的项,我的查询将是
SELECT * FROM items i INNER JOIN tags t on i.id= t.id WHERE tag= "foo"
我得到所有标记为“foo”的项,所以我如何子查询以取出所有标记为“bar”的项
编辑
根据下面提供的Matthew Coxa解决方案,如果有人发现任何缺陷,请告诉我
SELECT * FROM items i INNER JOIN
tags t ON t.item_id=i.id
WHERE tag = 'foo'
AND NOT EXISTS (
SELECT * FROM tags tt WHERE t.item_id = tt.item_id AND tag = 'bar'
)
最佳答案
SELECT *
FROM items i
INNER JOIN tags t
ON i.id = t.id
WHERE t.tag = "foo" AND NOT EXISTS (
SELECT *
FROM items ii
INNER JOIN tags tt
ON ii.id = tt.id
WHERE tt.tag = "bar" AND tt.id = t.id)