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_collection
和book
的出版物。每個publication
(不論何種類型)都有一個名爲crossref
的列,其中包含p_key
。這p_key
本身是指在同一個數據庫內的另一個publication
。
我想獲得此表格中所有book_collection
出版物的crossref
類型book
。我如何有效地做到這一點?
我只能寫上面的低效率語句,並且由於表中的記錄數量太長,無法完成。我如何使聲明不包含相關的子查詢?
偉大的工作,謝謝。 – Michael 2013-02-22 12:53:32
歡迎:)...表現更好嗎? – Meherzad 2013-02-22 12:55:35
好得多。大概在2到3秒內完成,而在10分鐘後我放棄了。 – Michael 2013-02-22 13:02:55