SQL で相関サブクエリを回避しようとしていますが、その方法がわかりません。これが私の現在の PostgreSQL ステートメントです。
INSERT INTO book_collection (publisher, p_key, collection_name, page_number)
(SELECT publisher,
p_key,
source,
pages
FROM db_publication_new AS d
WHERE d.type =
'book_collection'
AND (SELECT type
FROM db_publication_new
WHERE dblp_key = d.crossref)
= 'book');
つまり、基本的に と呼ばれるテーブルがdb_publication_new
あり、そこにはさまざまなタイプの出版物が含まれており、そのうちの 2 つは と と呼ばれbook_collection
ていbook
ます。タイプに関係なく、すべての には、 を含むpublication
と呼ばれる列があります。これ自体は、この同じデータベース内の別のものを参照しています。crossref
p_key
p_key
publication
book_collection
このテーブル内crossref
のタイプが であるすべての出版物を取得したいと考えていますbook
。これを効率的に行うにはどうすればよいですか?
上記の非効率的なステートメントしか記述できませんでした。テーブル内のレコードの量が原因で、完了するのに時間がかかりすぎています。ステートメントに相関サブクエリが含まれないようにするにはどうすればよいですか?