powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Мутный update
7 сообщений из 7, страница 1 из 1
Мутный update
    #39922158
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Как сделать update с join?
...
Рейтинг: 0 / 0
Мутный update
    #39922165
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Мутный update
    #39922178
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
комит,

JOIN напрямую нет, можно так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
-- Тестовые данные
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t3;

CREATE TEMPORARY TABLE t1 (id INT NOT NULL, value INT NOT NULL);
CREATE TEMPORARY TABLE t2 (id INT NOT NULL, value INT NOT NULL);
CREATE TEMPORARY TABLE t3 (id INT NOT NULL);

INSERT INTO t1 (id, value)
SELECT 1, 1 UNION ALL
SELECT 2, 1 UNION ALL
SELECT 3, 1 UNION ALL
SELECT 4, 1 UNION ALL
SELECT 5, 1 UNION ALL
SELECT 6, 1;

INSERT INTO t2 (id, value)
SELECT 1, 10 UNION ALL
SELECT 2, 11;

INSERT INTO t3 (id)
SELECT 1;

-- Обновить только те строки таблицы t1 которые есть в t2 и в t3 - значениями из t2 

-- I cпособ
UPDATE t1
	SET value = a.value
FROM (
		SELECT t1.id, t2.value FROM t1
			INNER JOIN t2 ON t1.id = t2.id
			INNER JOIN t3 ON t1.id = t3.id) AS a
WHERE a.id = t1.id;

-- II способ
WITH a AS 
(
	SELECT t1.id, t2.value FROM t1
		INNER JOIN t2 ON t1.id = t2.id
		INNER JOIN t3 ON t1.id = t3.id		
)
UPDATE t1
	SET value = a.value
FROM a 	
WHERE a.id = t1.id;

SELECT id, value FROM t1;
...
Рейтинг: 0 / 0
Мутный update
    #39922374
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
комит,

JOIN напрямую нет, можно так



Что значит нет??? Вот на вашем же примере

Код: plsql
1.
2.
3.
4.
UPDATE t1
SET value = t2.value
FROM t2
WHERE  t1.id = t2.id AND EXISTS (SELECT FROM t3 WHERE t3.id = t1.id);
...
Рейтинг: 0 / 0
Мутный update
    #39922399
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk

Что значит нет??? Вот на вашем же примере


Насколько я понимаю, автор имеет в виду UPDATE в стиле MSSQL (T-SQL)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
-- Тестовые данные
DECLARE  @t1 AS TABLE (id INT NOT NULL, [value] INT NOT NULL);
DECLARE  @t2 AS TABLE (id INT NOT NULL, [value] INT NOT NULL);
DECLARE  @t3 AS TABLE (id INT NOT NULL);

INSERT INTO @t1 (id, [value])
SELECT 1, 1 UNION ALL
SELECT 2, 1 UNION ALL
SELECT 3, 1 UNION ALL
SELECT 4, 1 UNION ALL
SELECT 5, 1 UNION ALL
SELECT 6, 1;

INSERT INTO @t2 (id, value)
SELECT 1, 10 UNION ALL
SELECT 2, 11;

INSERT INTO @t3 (id)
SELECT 1;

-- Обновить только те строки таблицы t1 которые есть в t2 и в t3 - значениями из t2 
UPDATE t1
  SET 
      [value] = t2.[value]
FROM @t1 AS t1
     INNER JOIN @t2 AS t2 ON t1.id = t2.id
     INNER JOIN @t3 AS t3 ON t1.id = t3.id;

SELECT id, [value] FROM @t1
...
Рейтинг: 0 / 0
Мутный update
    #39922488
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint,

Почти так же (если конечно primary key есть)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
UPDATE t1
  SET 
      value = t2.value
FROM t1 AS _t1
     INNER JOIN t2 AS t2 ON _t1.id = t2.id
     INNER JOIN t3 AS t3 ON _t1.id = t3.id
WHERE _t1.id=t1.id;
...
Рейтинг: 0 / 0
Мутный update
    #39922642
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
entrypoint,

Почти так же (если конечно primary key есть)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
UPDATE t1
  SET 
      value = t2.value
FROM t1 AS _t1
     INNER JOIN t2 AS t2 ON _t1.id = t2.id
     INNER JOIN t3 AS t3 ON _t1.id = t3.id
WHERE _t1.id=t1.id;



Согласен )))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Мутный update
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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