鍍金池/ 問答/數(shù)據(jù)庫/ 怎樣優(yōu)雅地用sql覆蓋數(shù)據(jù)庫表的一列?

怎樣優(yōu)雅地用sql覆蓋數(shù)據(jù)庫表的一列?

表1有字段A,B,C
表2有字段D
表1 和表2 的行數(shù)相同
現(xiàn)在想用表2的D字段的內(nèi)容去覆蓋替代表1的C字段內(nèi)容,假定這兩個(gè)字段都是字符型的,怎樣寫sql最優(yōu)雅?

回答
編輯回答
神曲

除了行數(shù)相同,兩個(gè)表的行間沒有任何關(guān)聯(lián)關(guān)系,用D替換C的說法就不明確了??梢钥紤]強(qiáng)制給一個(gè)排序順序row_number() over (order by)作為id進(jìn)行替換。但是這樣做的結(jié)果有什么意義只有題主自己把握了。

連新建表的權(quán)限也沒有,可以先insert

insert into T1 select A, B, D + '<<INSERTED>>' C from
    (select row_number() over (order by A,B,C) id, * from T1) S1 
    inner join
    (select row_number() over (order by D) id, * from T2) S2
    on S1.id = S2.id

delete

delete T1 where C not like '%<<INSERTED>>'

當(dāng)然最后還需要把Cupdate一下,去掉后綴<<INSERTED>>。

2017年4月27日 16:00
編輯回答
青瓷
UPDATE table1
SET table1.C = table2.D
FROM table1, table2 
WHERE table1.id = table2.id

最基礎(chǔ)的就行了,不然版本一更新,騷操作用不了了怎么辦。

2017年12月21日 07:38
編輯回答
嫑吢丕
--如你所愿的優(yōu)雅簡潔

--你的目的是用 `表2` 的 D 列覆蓋 `表1` 的 C 列

--我們換個(gè)思維,不用刪除和覆蓋那么復(fù)雜,直接查找出新的表顯示 D 列、隱藏 C 列即可

--即達(dá)到優(yōu)雅、而且簡潔

SELECT [Table1].A,[Table1].B,[Table2].D FROM [Table1],[Table2] 

2017年12月23日 05:57