42

我正在尝试用在 TYPE2 中找到的值覆盖在 TYPE1 中找到的值。

我写了这个 SQL 来尝试一下,但由于某种原因它没有更新:

select * from stuff

update stuff
set TYPE1 = TYPE2
where TYPE1 is null;

update stuff
set TYPE1 = TYPE2
where TYPE1 ='Blank';

http://www.sqlfiddle.com/#!3/a4733/17

为什么我在 TYPE1 中的值没有更新?

4

8 回答 8

64

这对我有用

select * from stuff

update stuff
set TYPE1 = TYPE2
where TYPE1 is null;

update stuff
set TYPE1 = TYPE2
where TYPE1 ='Blank';

select * from stuff
于 2013-04-23T23:06:12.017 回答
44
UPDATE a
SET a.column1 = b.column2
FROM myTable a 
INNER JOIN myTable b
on a.myID = b.myID

为了使“a”和“b”都起作用,必须定义两个别名

于 2014-08-07T19:35:37.647 回答
31
UPDATE TABLE_NAME SET COLUMN_A = COLUMN_B;

容易得多。至少在 Oracle SQL 上,我不知道这是否也适用于其他方言。

于 2017-09-12T11:50:50.780 回答
3

您将选择查询放在更新查询之前,因此您只会看到初始数据。放在select * from stuff;列表的末尾。

于 2013-04-23T23:06:11.693 回答
3

这个关于从同一个表中另一列的一部分更新列的答案。

update T1
set domainname = (New value) --Example: (SELECT LEFT(TableName.col, CHARINDEX('@',TableName.col)-1) STRIPPED_STRING FROM TableName where TableName.col = T2.Emp_ID)
from TableName T1
INNER JOIN
    TableName T2
ON 
    T1.ID= T2.ID;
于 2018-05-14T08:42:54.227 回答
2
update TABLE_1 a set COLUMN_1 = (select COLUMN_2 from TABLE_1 b where a.ID = b.ID)
于 2019-04-21T10:22:15.507 回答
1

您的选择语句在更新语句之前,请参阅更新的小提琴

于 2013-04-23T23:06:21.293 回答
0
UPDATE `tbl_user` SET `name`=concat('tbl_user.first_name','tbl_user.last_name') WHERE student_roll>965
于 2020-07-02T00:03:30.607 回答