2011-01-14 33 views
1

我有一個更新查詢類似以下內容:SQL:更新與多個值的列單查詢

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

支持的值「X」和「Y」,現在是從數據庫中提取TABLE2。例如。

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

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

只是爲了更清楚,假定TABLE2具有以下值:

alt text

能否請你幫我在一個查詢中這樣做!

我正在使用Oracle 11g。

+1

@Sandeep金達萊,什麼是你的RDBMS? –

+0

http://decipherinfosys.wordpress.com/2007/01/31/update-data-in-one-table-with-data-from-another-table/ –

+1

爲什麼不說你的RDBMS是什麼? –

回答

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; 
-3

對於Oracle:

UPDATE Table1 t1 
SET (X,Y) = (SELECT X,Y from Table2 WHERE ...YourConditions...) 
WHERE ... Another Conditions ... 

爲MySQL,SQL服務器

UPDATE t1 
SET t1.X = t2, t2.Y = t2.Y 
FROM Table1 t1, Table2 t2 
WHERE t1.Something = t2.Something 
+2

MySQL的'UPDATE'語句沒有'FROM'子句。 –

+0

我需要更新TABLE1,如下所示: 更新表TABLE1設置COL1 ='X'其中COL2 ='Y'。這兩個值(列表)都是從TABLE2收集的。我不確定您的查詢是否爲 UPDATE Table1 t1 SET(X,Y)=這個查詢不會更新TABLE2的所有值(而不僅僅是COL2在TABLE2中匹配的COL1的值)嗎? –

1
update TABLE1 
set TABLE1.COL1 = TABLE2.COL1 
from TABLE1 
join TABLE2 on TABLE1.COL2 = TABLE2.COL2 

(這將在SQL Server上運行)

+0

你不覺得'table'關鍵字在這裏是多餘的'update table TABLE1'? –

+0

@Jani是的,你說得對。我會更新答案。 – Rockcoder

2

@戴夫哥斯達黎加的答案是正確的,如果你限制自己update陳述。然而,我發現,使用merge聲明在這些情況下,允許我做這更簡單的方式:

merge into TABLE1 
     using TABLE2 
     on (TABLE2.COL2 = TABLE1.COL2) 
when matched then 
    update set TABLE1.COL1 = TABLE2.COL1;