我有一个更新查询,如下所示:
update table TABLE1 set COL1 = 'X' where COL2 = 'Y' ---1
支持值'X'和'Y'现在从数据库中获取TABLE2。 E.g。
select COL1, COL2 from TABLE2. ----2
我想用TABLE2中的值更新表TABLE1。
为了使其更清楚,假设TABLE2具有以下值:
请您帮我完成一次查询!
我正在使用Oracle 11g。
答案 0 :(得分:2)
对于Oracle,这是最基本的方法:
update TABLE1
set COL1 = (select TABLE2.COL1 from TABLE2 where TABLE2.COL2 = TABLE1.COL2)
where COL2 IN (select TABLE2.COL2 from TABLE2);
在某些情况下,这可能效率低下,因为它可以为TABLE1中的每一行执行子查询。
根据两个表的主键声明或唯一约束,您可以使用可更新的内联视图方法,这可能更有效:
update
(select TABLE1.COL1 as T1C1, TABLE1.COL2 as T1C2, TABLE2.COL1 as T2C1
from TABLE1 join TABLE2 on TABLE2.COL2 = TABLE1.COL2
)
set T1C1 = T2C1;
答案 1 :(得分:2)
@Dave Costa的答案是正确的,如果你限于update
陈述。但是,我发现在这些情况下使用merge
语句允许我以更直接的方式执行此操作:
merge into TABLE1
using TABLE2
on (TABLE2.COL2 = TABLE1.COL2)
when matched then
update set TABLE1.COL1 = TABLE2.COL1;
答案 2 :(得分:1)
update TABLE1
set TABLE1.COL1 = TABLE2.COL1
from TABLE1
join TABLE2 on TABLE1.COL2 = TABLE2.COL2
(这适用于Sql Server)
答案 3 :(得分:-3)
for oracle:
UPDATE Table1 t1
SET (X,Y) = (SELECT X,Y from Table2 WHERE ...YourConditions...)
WHERE ... Another Conditions ...
for mysql,sql-server
UPDATE t1
SET t1.X = t2, t2.Y = t2.Y
FROM Table1 t1, Table2 t2
WHERE t1.Something = t2.Something