2011-11-21 51 views
4

我有兩列這些列:SQL:如何在update語句中自引用列?

用戶: 用戶,級別,等級,位置。

類: 類,位置

用戶表的級列引用在類表中的同colmn。

我想要更新Users表中的所有行,以便Users表的「位置」列的每一行都等於該類的位置。

所以我有值的行: 邁克,數學,A +,紐約

而且在課程表中的相應行的數學是: 數學,芝加哥

我希望用戶表的行成爲 麥克,數學,A +,芝加哥。

感謝

+2

你可能要考慮正常化您的數據。如果位置僅依賴於類,爲什麼還要將它存儲在用戶表中? –

回答

1
update users a 
    set a.location = 
    (select b.location 
     from classes b 
     where b.class = a.class) 
+0

爲什麼不使用連接? – Maess

+0

我看不到它在哪裏是必要的。 –

+0

錯誤處理也不是必需的,但它的良好實踐。 – Maess

3
update 
    users 
set 
    users.location = classes.location 
from 
    classes 
where 
    classes.class = users.class 
+1

我不相信這是有效的語法 – Johan

+1

是的,它是有效的語法,至少在MS SQL Server中,我非常確定它與Sybase的相似性足以應用於此處。 –

+0

低估了無知?可愛 –

2

如何:

UPDATE U 
SET U.Location = C.Location 
FROM Users AS U 
INNER JOIN Classes AS C ON C.Class = U.Class 
       AND C.Location != U.Location 
; 
+0

使用連接+1。爲什麼我不斷看到SQL問題的答案,其中加入被省略而支持子選擇? – Maess