Допустим, у вас есть таблицы:Условное обновление таблицы SQL с РЕГИСТРИРУЙТЕСЬ
CREATE TABLE TABLE1 (ID INTEGER PRIMARY KEY, VAL INT, CONDITION INT);
CREATE TABLE TABLE2 (ID INTEGER PRIMARY KEY, VAL INT, CONDITION INT);
с данными:
INSERT INTO TABLE1 VALUES (0, 0, 100);
и
INSERT INTO TABLE2 VALUES
(0, 2, 100),
(1, 1, 100),
(3, 3, 100)
Что будет в TABLE1 после этого запроса и почему ?
UPDATE TABLE1 SET VAL = SOURCE.VAL
FROM TABLE2 SOURCE
WHERE TABLE1.CONDITION = SOURCE.CONDITION
я получил:
0;2;100
Означает ли это, что СУБД выполняется UPDATE
операцию несколько раз, и я вижу только конечный результат? Или он обновляет VAL
только один раз?
Объясните:
"Update on table1 (cost=270.68..562.65 rows=18818 width=24)"
" -> Merge Join (cost=270.68..562.65 rows=18818 width=24)"
" Merge Cond: (table1.condition = source.condition)"
" -> Sort (cost=135.34..140.19 rows=1940 width=14)"
" Sort Key: table1.condition"
" -> Seq Scan on table1 (cost=0.00..29.40 rows=1940 width=14)"
" -> Sort (cost=135.34..140.19 rows=1940 width=14)"
" Sort Key: source.condition"
" -> Seq Scan on table2 source (cost=0.00..29.40 rows=1940 width=14)"
Я использовал PostgreSQL.
Попробуйте установить VAL = SOURCE.VAL + 100 – jarlh
@jarlh, получил '0; 102; 100'. Но как RDBMS выбирает, какую строку из 'TABLE2' использовать? Получает ли он первую строку и пропускает другие? – pbespechnyi