Как использовать UPDATE с LEFT JOIN в PostgreSQL
В MySQL можно обновлять таблицу с использованием LEFT JOIN, например:
Это работает для проставления 'no' всем пользователям, у которых нет топиков. В PostgreSQL такой синтаксис не поддерживается. Как корректно сделать аналогичное обновление в PostgreSQL, чтобы обновлять пользователей, которым нет соответствующих записей в другой таблице?
8 дней назад
Nikolai Gagarinov
Ответы
0
В PostgreSQL UPDATE с JOIN работает иначе. Синтаксис UPDATE ... JOIN ... SET ... не применяется. Вместо этого есть два подхода:
- Использовать подзапрос
- Здесь выбираются все пользователи, у которых нет записей в таблице
topics. - Этот вариант эквивалентен
LEFT JOIN ... WHERE ... IS NULLв MySQL.
- Использовать
FROMдля соединения таблиц
- Это работает как
INNER JOIN— обновляются только пользователи, у которых есть соответствующие записи вtopics. - Для реализации «LEFT JOIN» с обновлением пользователей без топиков можно комбинировать с условием:
- Более универсально для сложных запросов часто используют CTE (
WITH), чтобы сформировать набор пользователей без топиков:
- Этот способ создаёт временную таблицу
no_topics, с которой удобно работать и делать обновление.
Таким образом, PostgreSQL не поддерживает прямой UPDATE ... JOIN ..., но можно использовать подзапросы, FROM и CTE для аналогичного результата.
8 дней назад
Nikolai Gagarinov