2013-04-23 68 views

回答

25

这对我的作品

select * from stuff 

update stuff 
set TYPE1 = TYPE2 
where TYPE1 is null; 

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

select * from stuff 
+0

是的,你说得对。但是在运行一次update语句之后,我会再次运行select语句......但是没有改变。每次运行后有没有新的小提琴实例? – Keven 2013-04-23 23:11:44

+1

@Keven是的,每个SQLFiddle执行独立于上一次运行。 – 2013-04-24 00:06:21

2

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

14
UPDATE a 
SET a.column1 = b.column2 
FROM myTable a 
INNER JOIN myTable b 
on a.myID = b.myID 

为了两个 “A” 和 “B” 的工作,这两个别名必须被定义为

+0

接受的答案有效,但是这是更直接点,并点 – hanzolo 2016-05-26 18:38:36

+0

我减去了一点,因为这实际上并没有回答我原来的问题。我想在'同一个表'中用'TYPE2'的值更新'TYPE1'的值。 – Keven 2016-11-22 21:07:03

+0

其实上面的例子回答了这个问题,因为如果仔细看看“myTable”被引用两次,JOIN是在与FROM语句相同的表上完成的。这只比接受的答案稍微冗长些。 – mastazi 2017-03-08 04:17:39

3
UPDATE TABLE_NAME SET COLUMN_A = COLUMN_B; 

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

+0

是的,也适用于SQL Server(所以你的回答对于这个问题是完全有效的)。 – 2018-02-09 10:30:51

+0

我得到错误:子查询返回了超过1个值。当子查询遵循=,!=,<, <= , >,> =或当子查询用作表达式时,这是不允许的。 – 2018-02-21 17:04:15

相关问题