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と呼ばれる列があります。これ自体は、この同じデータベース内の別のものを参照しています。crossrefp_keyp_keypublication
book_collectionこのテーブル内crossrefのタイプが であるすべての出版物を取得したいと考えていますbook。これを効率的に行うにはどうすればよいですか?
上記の非効率的なステートメントしか記述できませんでした。テーブル内のレコードの量が原因で、完了するのに時間がかかりすぎています。ステートメントに相関サブクエリが含まれないようにするにはどうすればよいですか?