2010-02-11 105 views
2

我有一個查詢問題。更新子查詢

我有一個來自德國的Zipcodes名爲'Postleitzahlen'的巨大表格。 沒有與公司另一臺名爲「Firmen」

結構是這樣的:

Firmen 
------ 
ID 
City 
State 
ZipCode 


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

現在我想,Firmen與他們correspendants更新所有空的(「」或NULL)國家領域

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) 
Postleitzahlen

這是我的實際查詢

我得到了xx受影響行的響應,但實際上並沒有更新。

有人可以幫助我嗎?

在此先感謝。

  • 丹尼斯
+0

你可能想改變你的MSSQL的標籤TSQL。這是多使用一點 – 2010-02-11 14:40:58

回答

4

這看起來像它應該正常工作。我會做的是運行以下查詢:

SELECT Firmen.State,Postleitzahlen.State 
FROM 
    Postleitzahlen 
INNER JOIN 
    Firmen ON Postleitzahlen.ZipCode = Firmen.ZipCode 
WHERE 
    (
     Firmen.State = '' 
    OR Firmen.State IS 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) 
+0

我得到兩列,第一列總是空的,第二列(總是)填充值。 無論如何,查詢運行,我得到xx影響的結果,但沒有任何更改:/ 有什麼想法? – hubbl 2010-02-11 15:27:07

+0

看看我的更新。我認爲這可能是因爲更新沒有使用別名值。我感覺好像幾年前遇到過這種情況,因爲現在當我運行更新時,我總是替換正在更新的表。如果這不起作用,你可以嘗試一個子查詢。這不是最佳的,但它應該工作。如果它不起作用,我可以給你代碼。 – 2010-02-11 15:35:16

+0

這將是很好,如果你發佈該查詢與子查詢,您更新的別名式查詢也不起作用 fyi:一個字段是varchar,另一個是nvarchar,但我發現這不能是原因.. – hubbl 2010-02-12 09:35:31

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)