2009-03-16 5 views
0

は、あなたが以下の2つのテーブルがあるとしましょう:T-SQLクエリ

X表

X_IDY_ID_FX_Value

1  1  Q 
2  1  G 
3  1  T 
4  2  W 
5  2  K 
... 

Y表

あなたはそのY親の値がAであるプロパティのみを照会し、次のように(私はより良いクエリがあり実現が、容赦クエリを記述して、それらを更新したい

Y_IDY_Value

1  A 
2  B 
... 

私):入社YテーブルのY_Value =「A」Xテーブルの行を更新します。


UPDATE X set X_Value = 'O' 
WHERE X_ID IN 
(
select distinct X.X_ID FROM X 
INNER JOIN Y ON X.Y_ID_F = Y.Y_ID 
WHERE Y.Y_Value = 'A' 
) 
 

私は以前、これはそれが一見言うだろうと思いました。しかし、X.X_IDは、WHERE句で制限されていると思われるものだけでなく、Xテーブルのすべての行を更新するように見えます。 X.X_IDによって、更新された行のセットを制限する際にwhere句の試行を完全に無視するようになります。なぜどんなアイディアですか?

EDIT: 私はそれは私が照会していますデータベース内のテーブルは、私はそれを言い紛らすしようとした例のように単純に関連するとされていない方法とは何かを持っているかもしれないと思います。

答えて

3

私は決してUPDATEステートメントでサブ選択に腹を立てました。代わりに、次のようなものを試してみてください:

UPDATE X SET X_Value = 'O' 
FROM Y 
WHERE Y.Y_ID = X.Y_ID_F 
    AND Y.Y_Value = 'A' 
+0

これは私がT-SQLを普通に書く方法ですが、既存のクエリが既に書き出されているため、サブ選択で使用され、記述されたとおりに動作することが期待されます。私はいつもサブセレクトを最初に解析することを理解しましたが、おそらく私は間違っています。 –

0

これは私にも意味をなさないので、試しました。更新ステートメントを実行すると、テーブルXの内容は次のようになります。

X_ID Y_ID X_VALUE 
1  1  O 
2  1  O 
3  1  O 
4  2  W 
5  2  K 

つまり、私が期待した結果です。ここに仕事場に何か他のものがないと確信していますか?私はあなたのサンプルクエリでマイナーな異常に気付きました: 'X.Y_ID_F'への参照。私はそれがちょうどタイプミスだと思った。