2015-09-07 24 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