表1有字段A,B,C
表2有字段D
表1 和表2 的行数相同
现在想用表2的D字段的内容去覆盖替代表1的C字段内容,假定这两个字段都是字符型的,怎样写sql最优雅?
表1有字段A,B,C
表2有字段D
表1 和表2 的行数相同
现在想用表2的D字段的内容去覆盖替代表1的C字段内容,假定这两个字段都是字符型的,怎样写sql最优雅?
除了行数相同,两个表的行间没有任何关联关系,用D
替换C
的说法就不明确了。可以考虑强制给一个排序顺序row_number() over (order by)
作为id
进行替换。但是这样做的结果有什么意义只有题主自己把握了。
连新建表的权限也没有,可以先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>>'
当然最后还需要把C
列update
一下,去掉后缀<<INSERTED>>。
--如你所愿的优雅简洁
--你的目的是用 `表2` 的 D 列覆盖 `表1` 的 C 列
--我们换个思维,不用删除和覆盖那么复杂,直接查找出新的表显示 D 列、隐藏 C 列即可
--即达到优雅、而且简洁
SELECT [Table1].A,[Table1].B,[Table2].D FROM [Table1],[Table2]
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
最基础的就行了,不然版本一更新,骚操作用不了了怎么办。