Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / delete + join / 4 сообщений из 4, страница 1 из 1
26.01.2015, 08:35:49
    #38862868
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete + join
помогите написать запрос по удалению из первой таблицы где есть связь 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
...
Рейтинг: 0 / 0
26.01.2015, 08:43:12
    #38862871
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete + join
Legushkaесли писать запрос так: DELETE tab1 t1 where t1.poleid in (select t2.tab1id) from tab2 t2)
то план выполнения ужасный - для каждой записи из t1 идет обращение к таблице t2


интересно а какой собственно вы план хотите для такой задачи?
От того что вы запрос перепишите далеко не факт что план изменится.
Приведите explain analyze для начала как я уже много раз предлагал вам вместо невнятных жалоб.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
26.01.2015, 08:46:34
    #38862873
delete + join
Legushka,

Какой-то у тебя эм-эс эс-ку-эль-ный акцент в синтаксисе запроса.
В постгре, если что, нужно писать DELETE ... USING.
Подробности, не поверишь, в документации ...
...
Рейтинг: 0 / 0
26.01.2015, 10:14:01
    #38862966
этта
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete + join
Добрый Э - Эх,
присоединяюсь к USING , но "negative loop" anti-join он не охватывает
приходится разнообразить not--exists-ом


-- откуда морал -- мс-скльный синтакс поширше будет, поуниверсальней. (хоть и мастдай).
а пж опять таки обосра облажалси, выбрав к реализации половинчатый ущербный синтакс.


план да -- можно бы привести, как вариант, когда табла2 узкая -- можно WHERE t1.id=ANY(ARRAY(SELECT id FROM tab2)) -- там какая-то разница возникает в планах. не факт, что полезная
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / delete + join / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]