我有一個更新查詢類似以下內容:SQL:更新與多個值的列單查詢
update table TABLE1 set COL1 = 'X' where COL2 = 'Y' ---1
支持的值「X」和「Y」,現在是從數據庫中提取TABLE2。例如。
select COL1, COL2 from TABLE2. ----2
我想用表2中的值更新表TABLE1。
只是爲了更清楚,假定TABLE2具有以下值:
能否請你幫我在一個查詢中這樣做!
我正在使用Oracle 11g。
我有一個更新查詢類似以下內容:SQL:更新與多個值的列單查詢
update table TABLE1 set COL1 = 'X' where COL2 = 'Y' ---1
支持的值「X」和「Y」,現在是從數據庫中提取TABLE2。例如。
select COL1, COL2 from TABLE2. ----2
我想用表2中的值更新表TABLE1。
只是爲了更清楚,假定TABLE2具有以下值:
能否請你幫我在一個查詢中這樣做!
我正在使用Oracle 11g。
對於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;
對於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
MySQL的'UPDATE'語句沒有'FROM'子句。 –
我需要更新TABLE1,如下所示: 更新表TABLE1設置COL1 ='X'其中COL2 ='Y'。這兩個值(列表)都是從TABLE2收集的。我不確定您的查詢是否爲 UPDATE Table1 t1 SET(X,Y)=這個查詢不會更新TABLE2的所有值(而不僅僅是COL2在TABLE2中匹配的COL1的值)嗎? –
update TABLE1
set TABLE1.COL1 = TABLE2.COL1
from TABLE1
join TABLE2 on TABLE1.COL2 = TABLE2.COL2
(這將在SQL Server上運行)
你不覺得'table'關鍵字在這裏是多餘的'update table TABLE1'? –
@Jani是的,你說得對。我會更新答案。 – Rockcoder
@戴夫哥斯達黎加的答案是正確的,如果你限制自己update
陳述。然而,我發現,使用merge
聲明在這些情況下,允許我做這更簡單的方式:
merge into TABLE1
using TABLE2
on (TABLE2.COL2 = TABLE1.COL2)
when matched then
update set TABLE1.COL1 = TABLE2.COL1;
@Sandeep金達萊,什麼是你的RDBMS? –
http://decipherinfosys.wordpress.com/2007/01/31/update-data-in-one-table-with-data-from-another-table/ –
爲什麼不說你的RDBMS是什麼? –