2017-06-01 156 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'