2015-04-28 93 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