我有3個表格。兩個表(par1,par1)都將(child_id)引用到第三個表(child)中的一個id。選擇ID不在多個表中出現的記錄
我喜歡在第三個表中找到孤兒,即沒有被其他兩個表中的任何一個引用的記錄。
如果我只打過一次引用表,我可以這樣寫:
SELECT * FROM child WHERE id NOT IN (SELECT child_id FROM par1)
但是我怎麼解決這個問題有兩個引用表?
我正在使用sqlite。
我有3個表格。兩個表(par1,par1)都將(child_id)引用到第三個表(child)中的一個id。選擇ID不在多個表中出現的記錄
我喜歡在第三個表中找到孤兒,即沒有被其他兩個表中的任何一個引用的記錄。
如果我只打過一次引用表,我可以這樣寫:
SELECT * FROM child WHERE id NOT IN (SELECT child_id FROM par1)
但是我怎麼解決這個問題有兩個引用表?
我正在使用sqlite。
SELECT *
FROM child
WHERE id NOT IN (SELECT child_id FROM par1) AND
id NOT IN (SELECT child_id FROM par2)
一種替代方法是使用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的索引決策引擎的期望的優化路徑。
啊,哈哈!我曾經想過加入選擇和其他複雜的東西,但是這很簡單,現在我有點尷尬:) –
哇,你已經是一年了,現在纔得到你的第一個「最佳答案」。現在我再也不問這個問題了。乾杯! :) –
嗯...今天我不得不回答一些問題,以便能夠發佈嵌入式圖像的問題:http://stackoverflow.com/questions/16804510/how-to-avoid-data-loss-with-ef -model先數據庫架構升級 – lightbricko