Обновить одну строку данных из таблицы в другую - PullRequest
2 голосов
/ 01 марта 2010

Как мне обновить полную строку данных, используя строку данных из другой таблицы .

Пример:

Table A

ID   |   NAME    |   ...   |
----------------------------
 1   |   Test    |   ...   |
 2   |   Test2   |   ...   |



Table B

ID   |   NAME    |   ...   |
----------------------------
 1   |   Test97  |   ...   |

Итак, я хочу скопировать содержимое одной строки таблицы B в таблицу A и переопределить существующие значения. Я не хочу называть все столбцы. Содержимое таблиц A и B является избыточным.

Обобщить: Я хочу эквивалент следующего оператора INSERT в качестве оператора UPDATE:

INSERT INTO destTable 
VALUES  (SELECT * FROM TABLE2)
FROM srcTable 

Любой намек, даже говорящий мне, что это невозможно, очень дорог.

Ответы [ 3 ]

6 голосов
/ 01 марта 2010

вы можете обновить набор столбцов (вам все равно придется перечислить столбцы один раз):

SQL> UPDATE table_a
  2     SET (ID, NAME, etc)
  3         = (SELECT * FROM table_b WHERE table_b.id = table_a.id)
  4   WHERE table_a.id IN (SELECT ID FROM table_b);

1 row updated
1 голос
/ 01 марта 2010

Вы хотите использовать оператор Oracle MERGE. С этим оператором он вставляется, если совпадение не существует, и обновляет, если оно уже существует.

Здесь - сайт с примером.

MERGE INTO bonuses b
USING (
  SELECT employee_id, salary, dept_no
  FROM employee
  WHERE dept_no =20) e
ON (b.employee_id = e.employee_id)
WHEN MATCHED THEN
  UPDATE SET b.bonus = e.salary * 0.1
  DELETE WHERE (e.salary < 40000)
WHEN NOT MATCHED THEN
  INSERT (b.employee_id, b.bonus)
  VALUES (e.employee_id, e.salary * 0.05)
  WHERE (e.salary > 40000);
1 голос
/ 01 марта 2010

Вроде так:

UPDATE suppliers  
SET supplier_name = ( SELECT customers.name
FROM customers
WHERE customers.customer_id = suppliers.supplier_id) 
WHERE EXISTS
  ( SELECT customers.name
    FROM customers
    WHERE customers.customer_id = suppliers.supplier_id); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...