Legushka
Дата: 26.01.2015 08:35:49
помогите написать запрос по удалению из первой таблицы где есть связь inner join всех связанных по ИД записей со второй таблицей
т.е. select t1.* from tab1 t1 inner join tab2 t2 (t1.poleid=t2.tab1id) работает
А DELETE tab1 t1 inner join tab2 t2 (t1.poleid=t2.tab1id) НЕ РАБОТАЕТ
если писать запрос так: DELETE tab1 t1 where t1.poleid in (select t2.tab1id) from tab2 t2)
то план выполнения ужасный - для каждой записи из t1 идет обращение к таблице t2
версия
PostgreSQL 9.1.14 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 64-bit
этта
Дата: 26.01.2015 10:14:01
Добрый Э - Эх,
присоединяюсь к USING , но "negative loop" anti-join он не охватывает
приходится разнообразить not--exists-ом
-- откуда морал -- мс-скльный синтакс поширше будет, поуниверсальней. (хоть и мастдай).
а пж опять таки обосра облажалси, выбрав к реализации половинчатый ущербный синтакс.
план да -- можно бы привести, как вариант, когда табла2 узкая -- можно WHERE t1.id=ANY(ARRAY(SELECT id FROM tab2)) -- там какая-то разница возникает в планах. не факт, что полезная