根据另一个表的匹配值更新一个表

时间:2014-04-14 22:06:27

标签: sql sql-server

编辑:这是SQL Server,不是 MYSQL因为我把它误认为

我在下面的声明中说我正在尝试更新F4105表,将其指定为'a'将COUNCS列设置为空白,其中COLEDG列等于07 ..但是,在执行此操作时,语句需要将它的COLITM列与F4101的IMLITM列匹配,并确保F4101的IMGLPT列不包含以FG,IN或RM开头的值。

update CRPDTA.f4105bak a
set a.COUNCS=0
where a.COLEDG='07'
and exists (
select b.IMLITM from CRPDTA.f4101bak b
where a.COLITM=b.IMLITM
and substring(b.IMGLPT,1,2) not in ('FG','IN','RM'));

我可以在删除第二行后将此语句作为select * from运行,但是当我尝试按上述方式运行语句时,它会在第一行的'a'上引发以下异常错误:

  

Msg 102,Level 15,State 1,Line 1
  'a'附近的语法不正确。

谢谢!

1 个答案:

答案 0 :(得分:1)

您无法在更新关键字后重命名,只能在" FROM"子句:

这样的事情:

update a
set COUNCS=0
FROM CRPDTA.f4105bak a
where a.COLEDG='07'
and exists (
select b.IMLITM from CRPDTA.f4101bak b
where a.COLITM=b.IMLITM
and substring(b.IMGLPT,1,2) not in ('FG','IN','RM'));

但会更好:

update a
set COUNCS=0
FROM CRPDTA.f4105bak a
     INNER JOIN CRPDTA.f4101bak b ON
        a.COLITM=b.IMLITM
WHERE a.COLEDG='07'
and substring(b.IMGLPT,1,2) not in ('FG','IN','RM'));