powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / LEFT JOIN в UPDATE в блоке FROM
7 сообщений из 7, страница 1 из 1
LEFT JOIN в UPDATE в блоке FROM
    #39985636
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
В процессе переноса кода с MS SQL на Postgresql возникли небольшие трудности...
Код MS SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
UPDATE T
SET T.field_1 = CASE WHEN .. THEN t2.field_1 ELSE t3.field_1 END 
FROM table_1 AS T
  INNER JOIN table_2 AS t2
	 ON t.F_t2_id  = t2.id
  INNER JOIN table_3 AS t3
     ON t.F_t3_id  = t3.id



успешно перевел на
Код: plsql
1.
2.
3.
4.
5.
6.
 UPDATE table_1 AS T
SET T.field_1 = CASE WHEN .. THEN t2.field_1 ELSE t3.field_1 END 
FROM table_2 AS t2
	 table_3 AS t3, 
 WHERE t.F_t2_id  = t2.id
  AND t.F_t3_id  = t3.id   


Но как быть,если в блоке from есть left join и значения от него обрабатываются в блоке SET ?
Код MS SQL :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
UPDATE T
SET T.field_1 = CASE WHEN .. THEN t2.field_1 WHERE .. THEN ISNULL(t4.field_1,0) ELSE t3.field_1 END 
FROM table_1 AS T
  INNER JOIN table_2 AS t2
	 ON t.F_t2_id  = t2.id
  INNER JOIN table_3 AS t3
     ON t.F_t3_id  = t3.id	 
   LEFT JOIN table_4 AS t4
     ON  t.F_t4_id  = t4.id
...
Рейтинг: 0 / 0
LEFT JOIN в UPDATE в блоке FROM
    #39985639
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
self join с table_1 - только такой вариант остался ? Есть таблицы без ключа уникальности(ни PK ни UK). Т.е. по некоторым таблицам self join проблематично сделать...
...
Рейтинг: 0 / 0
LEFT JOIN в UPDATE в блоке FROM
    #39985687
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cristiano_Rivaldo,

ну например подзапросом

Код: plsql
1.
2.
3.
4.
5.
6.
7.
UPDATE T
SET T.field_1 = CASE WHEN .. THEN t2.field_1 WHERE .. THEN coalesce((select t4.field_1 from table_4 AS t4 where  t.F_t4_id  = t4.id), 0) ELSE t3.field_1 END 
FROM table_1 AS T
  INNER JOIN table_2 AS t2
	 ON t.F_t2_id  = t2.id
  INNER JOIN table_3 AS t3
     ON t.F_t3_id  = t3.id	 
...
Рейтинг: 0 / 0
LEFT JOIN в UPDATE в блоке FROM
    #39985741
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

)))) В реальных примерах там много полей в блоке SET. Писать для каждого поля отдельный подзапрос - накладно. Видимо self join единственный адекватный вариант пока...
...
Рейтинг: 0 / 0
LEFT JOIN в UPDATE в блоке FROM
    #39985786
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MERGE использовать что-то мешает?..
...
Рейтинг: 0 / 0
LEFT JOIN в UPDATE в блоке FROM
    #39985807
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Отсутствие в Postgres-е оного ¯\_(ツ)_/¯
...
Рейтинг: 0 / 0
LEFT JOIN в UPDATE в блоке FROM
    #39985900
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и не осилили, хотя https://www.postgresql.org/message-id/attachment/23520/sql-merge.html намекает на его появление ещё в восьмой версии?..
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / LEFT JOIN в UPDATE в блоке FROM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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