Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Мутный update / 7 сообщений из 7, страница 1 из 1
04.02.2020, 10:32
    #39922158
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мутный update
Добрый день.

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

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
04.02.2020, 16:27
    #39922374
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мутный update
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
04.02.2020, 16:52
    #39922399
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мутный update
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
04.02.2020, 19:46
    #39922488
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мутный update
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
05.02.2020, 10:10
    #39922642
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мутный update
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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Мутный update / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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