2009-11-24 25 views
3

我有一個從表中檢索結果的sql查詢,但如果id不在另一個表中,我需要它才顯示結果。如何從不存在id的子查詢中獲取

$sql = "SELECT id FROM TABLE_1 WHERE id NOT IN(SELECT more_id FROM TABLE_2)

的想法是,如果ID沒有在「more_id」列表中存在,那麼它應該顯示的結果。

它似乎沒有工作,任何幫助將不勝感激。 我應該提到「more_id」只是一個「id」,但在另一個存儲其他記錄的表中。

+0

什麼問題?乍一看,你的查詢看起來確定你正在描述的內容... – 2009-11-24 02:42:22

回答

4

這應該工作:

$sql = "SELECT TABLE_1.id 
      FROM TABLE_1 
      LEFT JOIN TABLE_2 
       ON TABLE_1.id = TABLE_2.more_id 
      WHERE TABLE_2.more_id IS NULL" 

沒有WHERE子句,你最終會在TABLE_1的所有項目,包括在TABLE_2和火柴那些沒有的人的名單。添加WHERE子句過濾匹配。

+0

糾正我,如果我錯了,是不是這樣'SELECT ID FROM TABLE_1 WHERE ID IS NULL'。對我來說沒有意義。 – 2009-11-24 02:45:15

+0

這應該與OP的查詢產生相同的結果集,但是,不是嗎? (取決於RDBMS如何使用索引,但是,一個*可能會比另一個更快,但這不是原來的問題。) – 2009-11-24 02:46:43

+0

不,它不一樣。添加了說明來解釋原因。 – Ali 2009-11-24 02:46:53

0

我最好打賭的是一張桌子使用VARCHAR作爲ID,另一張桌子使用INTEGERCHAR或其他無法比擬的類型。