2013-04-23 70 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

相關問題