2014-02-13 58 views
0

我正在嘗試編寫一個查詢來檢查一個表中的值是否在其他表中有任何相應的條目。我有以下的工程,但有更快的方法嗎?也許使用exists()函數?如何查詢一個表中的值是否在其他表中有任何相應的條目

爲了澄清,這將在sqlite。此外,我需要製造商中每行的值,以及它是否在任何其他表中都有條目。

select tM.val, min(t1.val) as MakesCars, min(t2.val) as MakesTrucks, 
min(t3.val) as MakesVans from tableManufactures tM 
left join tableCars t1 on tM.id = t1.Manid 
left join tableTrucks t2 on tM.id = t2.Manid 
left join tableVans t3 on tM.id = t3.Manid 
group by tM.val 
order by tM.val 

結果會是這個樣子:

Manufacturer MakesCars MakesTrucks MakesVans 
Ford   85   15   20 
Chevy   72   12   NULL 
Mazda   42   NULL   NULL 

因此,任何數值表明,他們作出這樣和一個空將表明他們不這樣做。

+0

什麼RDBMS是這樣? –

+0

您是否需要僅存在於所有三個表格和tableManufactures中的值,或者存在於tableManufactures和三個表格中的任何一箇中的值? – Ruslan

回答

2

對於連接,數據庫必須查找所有匹配的記錄,其中大多數記錄因min()而丟失。

使用EXISTS的確很可能是更有效的:

SELECT val, 
     EXISTS (SELECT 1 
       FROM tableCars 
       WHERE Manid = tM.id) AS MakesCars, 
     EXISTS (SELECT 1 
       FROM tableTrucks 
       WHERE Manid = tM.id) AS MakesTrucks, 
     EXISTS (SELECT 1 
       FROM tableVans 
       WHERE Manid = tM.id) AS MakesVans 
FROM tableManufactures AS tM 
ORDER BY val 
相關問題