2011-09-01 66 views
3

我試圖加入2個表格並對值不存在進行過濾。僅當表中的值不在表中時才加入表格

Table_Items:ITEM_ID,標題等

Table_History:ITEM_ID,history_id,行動,日期

每個光盤有許多可能的行動(購買,補充,發揮,撕裂等),每個動作產生由item_id鏈接的table_history中的新行。我正在查找的查詢將返回所有尚未翻錄的光盤。我的查詢返回的行太多,所有內容都會返回,因爲每個項目的歷史記錄表中至少有一個條目。

SELECT items.item_id, items.title AS Title, items.`author/creator`, history.action 
FROM items 
LEFT JOIN history ON items.item_id = history.item_id 
WHERE history.action NOT LIKE 'Ripped%' GROUP BY items.item_id ORDER BY title 

我正在使用mySQL。幫助將不勝感激!謝謝。

回答

7

的動作過濾器只需添加到一起,然後測試空(反連接),在那裏

SELECT items.item_id, 
     items.title AS title, 
     items.`author/creator`, 
     history.ACTION 
FROM items 
     LEFT JOIN history 
     ON items.item_id = history.item_id 
      AND history.ACTION LIKE 'Ripped%' 
WHERE history.item_id IS NULL 
GROUP BY items.item_id 
ORDER BY title 

你也可以做一個不

SELECT items.item_id, 
    items.title AS title, 
    items.`author/creator`, 
    history.ACTION 
FROM items 
     LEFT JOIN history 
     ON items.item_id = history.item_id 
WHERE history.item_id NOT IN (SELECT history.item_id 
             FROM history 
             WHERE history.ACTION LIKE 'Ripped%') 
GROUP BY items.item_id 
ORDER BY title 
+0

謝謝!如果'history.action.item_id'更改爲'history.item_id',則第二種解決方案效果很好。 – James

+0

@James I更新了答案 –