Я пытаюсь избежать коррелированного подзапроса в моем 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
Добро пожаловать:) ... Это лучше в производительности? – Meherzad
Гораздо лучше. Закончено примерно через 2 или 3 секунды, пока я не сдался через 10 минут. – Michael