我试图在我的 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_collection
和book
。每一个publication
,无论类型如何,都有一个名为的列crossref
,其中包含一个p_key
. 这p_key
本身是指publication
同一数据库中的另一个。
我想获取book_collection
该表中所有crossref
类型为 的出版物book
。我如何有效地做到这一点?
我只能写上面效率低下的语句,并且由于我表中的记录数量太长,它需要很长时间才能完成。如何使语句不包含相关子查询?