2013-05-28 98 views
0

我有3個表格。兩個表(par1,par1)都將(child_id)引用到第三個表(child)中的一個id。選擇ID不在多個表中出現的記錄

我喜歡在第三個表中找到孤兒,即沒有被其他兩個表中的任何一個引用的記錄。

如果我只打過一次引用表,我可以這樣寫:

SELECT * FROM child WHERE id NOT IN (SELECT child_id FROM par1) 

但是我怎麼解決這個問題有兩個引用表?

我正在使用sqlite。

回答

5
SELECT * 
FROM child 
WHERE id NOT IN (SELECT child_id FROM par1) AND 
     id NOT IN (SELECT child_id FROM par2) 
+0

啊,哈哈!我曾經想過加入選擇和其他複雜的東西,但是這很簡單,現在我有點尷尬:) –

+0

哇,你已經是一年了,現在纔得到你的第一個「最佳答案」。現在我再也不問這個問題了。乾杯! :) –

+1

嗯...今天我不得不回答一些問題,以便能夠發佈嵌入式圖像的問題:http://stackoverflow.com/questions/16804510/how-to-avoid-data-loss-with-ef -model先數據庫架構升級 – lightbricko

0

一種替代方法是使用LEFT OUTER JOIN:

SELECT child.* 
FROM child LEFT OUTER JOIN par1 ON (child.id = par1.child_id) 
      LEFT OUTER JOIN par2 ON (child.id = par2.child_id) 
WHERE par1.child_id IS NULL AND par2.child_id IS NULL 

執行子查詢可以或可以不找到在SQLite的索引決策引擎的期望的優化路徑。

相關問題