我有一個從表中檢索結果的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」,但在另一個存儲其他記錄的表中。
我有一個從表中檢索結果的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」,但在另一個存儲其他記錄的表中。
這應該工作:
$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子句過濾匹配。
糾正我,如果我錯了,是不是這樣'SELECT ID FROM TABLE_1 WHERE ID IS NULL'。對我來說沒有意義。 – 2009-11-24 02:45:15
這應該與OP的查詢產生相同的結果集,但是,不是嗎? (取決於RDBMS如何使用索引,但是,一個*可能會比另一個更快,但這不是原來的問題。) – 2009-11-24 02:46:43
不,它不一樣。添加了說明來解釋原因。 – Ali 2009-11-24 02:46:53
我最好打賭的是一張桌子使用VARCHAR
作爲ID,另一張桌子使用INTEGER
,CHAR
或其他無法比擬的類型。
什麼問題?乍一看,你的查詢看起來確定你正在描述的內容... – 2009-11-24 02:42:22