2017-04-14 17 views
0

テーブルoのフィールドskuをテーブルpのフィールドAutoSKUに更新する以下のクエリがあります。そしてそれを実行するとエラーが出ます: "あいまいな列名 'sku'"。私はまた、エンジンがWHERE条件でどのスキューについて話しているのか分からないので、問題があることも知っています。しかし、各更新行が正しくマップされていることを確認するには、その条件が必要です。 skuをo.skuに置き換えると、別のエラー "複数のパートの識別子" o..sku "をバインドできませんでした。"何か案は?Sql Update - あいまいな列名

UPDATE o 
SET  sku = p.AutoSKU 
FROM o (NOLOCK) 
     JOIN a (NOLOCK) ON a.Sku = o.sku 
     JOIN p (NOLOCK) ON p.Code = a.ProductCode 
WHERE o.sku <> p.AutoSKU 
     AND sku = a.Sku 
+1

ここで 'AND sku = a.Sku'には、最初の' sku'に適切なテーブルエイリアスを付加する必要があります。 –

+1

あなたの質問は理にかなっていません。 'on'節に' Sku'の条件がすでにあります。 'WHERE'節で繰り返す必要はありません。 –

+0

あなたは正しいです、@ GordonLinoff。私はエンジンがFROM句のoテーブルとは違ってUpdateクエリのoテーブルを扱うことを心配していました。ありがとうございました! –

答えて

1

それが原因最後の行に最も可能性があります - あなたは、最初sku列をエイリアスする必要があり、以下のようなAND sku = a.Sku

UPDATE o 
SET  sku = p.AutoSKU 
FROM o (NOLOCK) 
     JOIN a (NOLOCK) ON a.Sku = o.sku 
     JOIN p (NOLOCK) ON p.Code = a.ProductCode 
WHERE o.sku <> p.AutoSKU 
     AND o.sku = a.Sku -- a bit redundant 

@GordonLinoffが述べたように、あなたはその条件を必要としませんが

既に ONの節にあるので、 WHERE節にあります。

+0

これは私が言及したようにエラーをもたらすでしょう。私はすでにそれを試しました。しかし、ゴードンは正しく、私はその状態でそれを再試行し、正しい結果をもたらす。ありがとうございました! –

0

これは問題ないはず:

UPDATE o 
    SET sku = p.AutoSKU 
    FROM o JOIN 
     a 
     ON a.Sku = o.sku JOIN 
     p 
     ON p.Code = a.ProductCode 
    WHERE o.sku <> p.AutoSKU; 

ON句は、すでにskuの上の条件があります。 WHERE節でこれを繰り返す必要はありません。

また、非常に意図的に使用している場合を除き、WITH (NOLOCK)を使用しないでください。

最後に、そのバージョンのクエリに誤字があることを示すエラーメッセージが表示されます。 o..skuo.skuと同じではありません。

関連する問題