2012-03-28 42 views
0

我有兩個表,一個表中有一個外鍵。我想根據某些標準獲取外表中不存在的所有記錄。MySQL加入表並獲得不存在的結果

這裏是我的表:

item_setting

  • setting_id
  • CATEGORY_ID

項目

  • ITEM_ID
  • setting_id
  • expired_dt

這是我現在使用的查詢:

SELECT 
    iset.setting_id 
FROM 
    item_settings iset 
LEFT OUTER JOIN 
    item i ON i.setting_id = iset.setting_id 
WHERE 
    iset.category_id = '5' AND i.setting_id is null 

此查詢的工作提供任何setting_id的沒有一記錄在特定類別的項目表中。

但是,現在我想包括expired_dt小於time()(意味着它已過期)的情況。換句話說,我想補充一點:

WHERE 
    iset.category_id = '5' AND (i.setting_id is null OR i.expired_dt < '".time()."') 

但是,這不起作用,它會返回所有記錄。

有什麼建議嗎?也許我完全過於複雜這....我只想從item_settings表中返回setting_id,其中項目表中關聯的expired_dt過期或者它甚至不存在於項目表中。

謝謝!

+0

什麼列類型是expired_dt? – liquorvicar 2012-03-28 14:36:45

+0

你的Where子句看起來很好,但是i.expired_dt <'「.time()。」'條件真的很奇怪,請檢查expired_dt列中的每個值是否都是真的 – Hari 2012-03-28 14:39:55

+0

expired_dt總是非null? – 2012-03-28 14:40:33

回答

1

嘗試將時間戳條件移入連接子句。類似於

item_settings iset 
LEFT OUTER JOIN 
    item i ON i.setting_id = iset.setting_id and i.expired_dt > time() 
+0

如果項目表中沒有記錄,則會引發錯誤。問題在於項目表中存在的記錄已經過期且未過期。它應該只有一個記錄,但尚未過期... – dzm 2012-03-28 15:05:56

+0

引發了什麼錯誤? – KernelM 2012-03-28 15:14:11

+0

我收回,沒有錯誤。但不是所期望的結果呢 – dzm 2012-03-28 15:22:27

相關問題