我有两个表一个有项,一个有标记,我想在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)

07-25 22:59
查看更多