SQL:使用单个查询更新具有多个值的列

时间:2011-01-14 11:43:13

标签: sql oracle oracle11g

我有一个更新查询,如下所示:

update table TABLE1 set COL1 = 'X' where COL2 = 'Y' ---1

支持值'X'和'Y'现在从数据库中获取TABLE2。 E.g。

select COL1, COL2 from TABLE2. ----2

我想用TABLE2中的值更新表TABLE1。

为了使其更清楚,假设TABLE2具有以下值:

alt text

请您帮我完成一次查询!

我正在使用Oracle 11g。

4 个答案:

答案 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