SQL连接而不是嵌套查询

时间:2012-10-26 17:35:19

标签: sql

select baseurl from tmp_page_tbl 
where baseurl NOT IN ( select baseurl from page_lookup )

如何使用连接而不是嵌套来编写此查询。

我们的想法是从tmp tbl获取basempls,这在base_lookup表中是不存在的

3 个答案:

答案 0 :(得分:1)

 select baseurl
 from tmp_page_tbl t 
 left outer join page_lookup p on t.baseurl = p.baseurl 
 where p.baseurl IS NULL

答案 1 :(得分:1)

你可以使用如下的连接重写:

SELECT baseurl from tmp_page_tbl as t
LEFT JOIN page_lookup as pl
ON t.baseurl=pl.baseurl
where pl.baseurl IS NULL
除非你有令人信服的理由,否则我不确定我会不会这样做。以下是一些值得关注的链接:

答案 2 :(得分:0)

如果你没有选择大部分表并且你在page_lookup.baseUrl上编制索引,那么不存在应该是最有效的。

select baseurl from tmp_page_tbl tmp
where not exists ( select 1 from page_lookup WHERE baseurl = tmp.baseurl );

在某些RDBMS(Oracle DB和Postgres)上,您可以使用MINUS(或Postgres中的EXCEPT)。在某些情况下,这非常有效。

相关问题