使用子查询更新

时间:2010-02-11 14:36:55

标签: sql sql-server

我的查询有问题。

我有一张名为'Postleitzahlen'的德国Zipcodes表。 公司还有另一张名为'Firmen'的表格

结构是这样的:

Firmen
------
ID
City
State
ZipCode


Postleitzahlen
--------------
ZipCode
State

现在我想要, Firmen 的所有空('或NULL)状态字段都使用 Postleitzahlen

的相关对象进行更新

这是我的实际查询:

UPDATE 
    Firmen
SET 
    Firmen.State = Postleitzahlen.State 
FROM
    Postleitzahlen
INNER JOIN 
    Firmen ON Postleitzahlen.ZipCode = Firmen.ZipCode 
WHERE 
    (
      Firmen.State = ''
   OR Firmen.State IS NULL )

我收到xx受影响的行的响应,但事实上,没有任何更新。

有人可以帮助我吗?

提前致谢。

  • 丹尼斯

2 个答案:

答案 0 :(得分:4)

看起来应该可以正常工作。我要做的是运行以下查询:

SELECT Firmen.State,Postleitzahlen.State 
FROM
    Postleitzahlen
INNER JOIN 
    Firmen ON Postleitzahlen.ZipCode = Firmen.ZipCode 
WHERE 
    (
      Firmen.State = ''
   OR Firmen.State IS NULL )

看看能得到什么。如果您在两列中获得带有值的结果,那么您可能会遇到其他问题。但是,我猜测其中一列是null或为空,因为您正在更新行但没有任何更改。

然后你的查询没有任何问题。我想可能是你的更新。尝试使表格成为别名,如下所示:

UPDATE 
    F
SET 
    F.State = Postleitzahlen.State 
FROM
    Postleitzahlen
INNER JOIN 
    Firmen F ON Postleitzahlen.ZipCode = F.ZipCode 
WHERE 
    (
      F.State = ''
   OR F.State IS NULL )

答案 1 :(得分:1)

UPDATE 
    Firmen f
SET 
    f.State = (SELECT p.State FROM Postleitzahlen p WHERE p.ZipCode = f.ZipCode)
WHERE 
    (
      f.State = ''
   OR f.State IS NULL )