1

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。これを効率的に行うにはどうすればよいですか?

上記の非効率的なステートメントしか記述できませんでした。テーブル内のレコードの量が原因で、完了するのに時間がかかりすぎています。ステートメントに相関サブクエリが含まれないようにするにはどうすればよいですか?

4

1 に答える 1

2

これを試して

INSERT INTO book_collection (publisher, p_key, collection_name, page_number) 
VALUES
(SELECT d1.publisher,
    d1.p_key, 
    d1.source, 
    d1.pages 
FROM db_publication_new AS d1, db_publication_new AS d2 
WHERE d1.type = 'book_collection' 
AND d2.dblp_key = d1.crossref 
AND d2.type = 'book');
于 2013-02-22T12:47:10.317 に答える