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,它包含各种类型的出版物,其中两个称为book_collectionbook。每一个publication,无论类型如何,都有一个名为的列crossref,其中包含一个p_key. 这p_key本身是指publication同一数据库中的另一个。

我想获取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 回答