select baseurl from tmp_page_tbl
where baseurl NOT IN ( select baseurl from page_lookup )
ネストする代わりに結合を使用してこのクエリを作成するにはどうすればよいですか。
アイデアは、page_lookupテーブルに存在しないtmptblからbaseurlsを取得することです。
select baseurl from tmp_page_tbl
where baseurl NOT IN ( select baseurl from page_lookup )
ネストする代わりに結合を使用してこのクエリを作成するにはどうすればよいですか。
アイデアは、page_lookupテーブルに存在しないtmptblからbaseurlsを取得することです。
select baseurl
from tmp_page_tbl t
left outer join page_lookup p on t.baseurl = p.baseurl
where p.baseurl IS NULL
以下のように結合を使用して書き直すことができます。
SELECT baseurl from tmp_page_tbl as t
LEFT JOIN page_lookup as pl
ON t.baseurl=pl.baseurl
where pl.baseurl IS NULL
やむを得ない理由がない限り、そうするかどうかはわかりません。以下は、一見の価値があるいくつかのリンクです。
ほとんどのテーブルを選択しておらず、page_lookup.baseUrl でインデックスを作成している場合は、not exists が最も効率的です。
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) を使用できます。これは場合によっては非常に効率的です。