2015-09-07 26 views
0

是否可以使用JOIN重寫以下SQL查詢或以其他方式使其更有效? 我可能會使用SQLite(我可以連接到幾個不同的數據庫),這意味着我不能使用RIGHT JOIN(s)。下面查詢中的省略號(...)意味着我可以在那裏有許多UNION(s)。使用連接重寫SQL查詢(或使其他方式更有效)

我以編程方式構造這個查詢,因爲在我的情況下沒有其他方法。我只是想知道如何重寫它以使其更高效。有任何想法嗎 ? 在此先感謝。

SELECT serial_nr, name, cert_type FROM certificates WHERE (cert_type<3 AND 
serial_nr IN 
(
    SELECT DISTINCT serial_nr FROM certificates WHERE (cert_type<3 AND (name LIKE 'george%')) 
    UNION 
    SELECT DISTINCT serial_nr FROM ip_addresses WHERE ((address LIKE '192.168%')) 
    .... 
)); 
+0

我認爲你不需要那些'DISTINCT's;)。 –

+0

這取決於數據庫模式以及子查詢和整體查詢的選擇性。 –

回答

1

嘗試類似這樣;

SELECT serial_nr, name, cert_type FROM certificates A 
inner join certificates B on A.serial_nr=B.serial_nr and B.name like'george%' 
inner join ip_address C on A.serial_nr=C.serial_nr and C.Address like '192.168%' 
... 
WHERE A.cert_type<3 
+1

經過一些修改(將內連接更改爲左連接)並添加完全限定名稱的表 - 它的工作原理!你沒有精確地回答我的問題,但你指出我正確的方向,所以我會接受你的答案 - 非常感謝你! – sirgeorge