2015-04-28 60 views
0

我有一个items表,一个tags表和一个reletations表。 我需要找到没有标记的项目。找到多对多没有关系

有了这个(工作)查询,我觉得每个项目的标签数量:

SELECT i.id, i.text, COUNT(ti.item) AS count 
FROM items AS i 
JOIN topic_item AS ti ON ti.item = i.id 
GROUP BY ti.item 

如果试图用修改查询:

ti.item != i.id 

或者我加

WHERE count = 0 

但这不是正确的方法。 什么是正确的方法?

回答

1

您可以使用left join,并获得在没有匹配的标签的物品:

SELECT i.id, i.text 
FROM items AS i 
LEFT JOIN topic_item AS ti ON ti.item = i.id 
WHERE ti.item is null 

您还可以使用not exists

SELECT i.id, i.text 
FROM items AS i 
WHERE not exists(
    select * from topic_item AS ti 
    where ti.item = i.id 
) 
+0

第一个查询的结果只显示第一行,第二个完美显示。谢谢! – WalterV

+1

@WalterVilla:当我测试第一个查询时,我得到没有主题的所有行:http://sqlfiddle.com/#!9/6aec4/1 – Guffa

+0

好吧,也许我错了成绩单。谢谢 – WalterV

1

尝试left join如下

SELECT i.id, i.text, COUNT(ti.item) AS count 
FROM items AS i 
LEFT JOIN topic_item AS ti ON ti.item = i.id 
WHERE ti.item is null 
GROUP BY ti.item 
+0

结果仅显示第一行。在我的情况下,没关系。 – WalterV