2017-06-01 190 views
0

我需要根據對同一張表運行的查詢更新表上的字段。在WHERE子句中使用嵌套SELECT語句更新表?

我需要更新的值是所有記錄相同,基本上是我需要更新從1到0值1我已經在網上做了2

SET value1 = '0' 

我試圖巢SELECT語句在WHERE子句中使用從SELECT語句返回的值作爲WHERE子句的一部分,但收到以下錯誤:

Msg 512,Level 16,State 1,Line 1 子查詢返回的值超過1值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。 該聲明已被終止。

下面是我正在使用的腳本。

UPDATE TABLE1 
    SET value1 = '0' 
     WHERE EMPLOYID = (SELECT Employid FROM TABLE1 WHERE FIELD1 = 'EXPN' 
and value1='1') 
      and FIELD1 = 'EXPN' 

我試圖做的是設置值1 =「0」,與該FIELD1值「EXPN」,目前有一個值1 =相關聯的所有員工「1」

我初學者,所以我對上面的任何不正確的語義道歉。

回答

0

如果你想使用一個策略來執行使用子查詢的更新,請嘗試這種(請注意,從「=」到「中」的變化):

UPDATE 
t1 
SET 
t1.value1 = '0' 
From 
TABLE1 t1 
WHERE 
t1.EMPLOYID in (SELECT t2.Employid FROM TABLE1 t2 WHERE t2.FIELD1 = 'EXPN' and t2.value1='1') 
and 
t1.FIELD1 = 'EXPN' 

然而,正如其他人所指出的,你不需要每個問題都有一個子查詢。這應該只是正常工作,而且還需要給你靈活地添加更多的表:

UPDATE 
t1 
SET 
t1.value1 = '0' 
From 
TABLE1 t1 
WHERE 
t1.FIELD1 = 'EXPN' 
and 
t1.value1='1' 
+0

雖然我現在認識到,由於第一個答案,那我不需要子查詢,這個答案幫助我理解了如何利用子查詢,並且在其他腳本中是無價的。 – Synesthesia

2

您不需要子查詢,因爲您在UPDATE期間已經查看了TABLE1。簡單地說:

UPDATE TABLE1 
SET value1 = '0' 
WHERE FIELD1 = 'EXPN' AND value1 = '1' 
0

換上同等IN

UPDATE TABLE1 
    SET value1 = '0' 
     WHERE EMPLOYID IN (SELECT Employid FROM TABLE1 WHERE FIELD1 = 'EXPN' 
and value1='1') 
      and FIELD1 = 'EXPN'