如何使用其他表中的数据行更新完整的数据行。
示例:
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
任何提示,甚至告诉我它不可能,都非常适合。
答案 0 :(得分:6)
您可以更新一组列(您仍然需要列出一次列):
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 :(得分:1)
像这样:
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);
答案 2 :(得分:1)
您想使用Oracle MERGE语句。使用此语句,如果匹配不存在则插入,如果匹配则已存在,则进行更新。
Here是一个有示例的网站。
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);