2010-12-18 18 views
0

列a、b、およびcを持つ表MyTableがintの場合は、私がbとcの値に基づいてすべてのaを更新したいと考えると、複数の条件でtsqlの表を更新する

Update MyTable set a = 2 where b = 1 and c = 1 

それは遅すぎだし、この文は動作しませんなぜ私は私の人生のために見ることができない、私は愚かな何かが足りないのですか?

編集者は、エラーを忘れました。

"副問合せが=、!=、<、< =、>、> =、または副問合せが式として使用されている場合は、これは許可されません。

Edit2:これは私が使用していた正確なクエリ(別の列名)でした。テーブルには壊れたトリガーがありました。とにかく助けてくれてありがとう。

+0

なぜ機能しないのですか?エラー、更新されたものはありません。 – sgriffinusa

+0

これはうまくいくはずです。なぜそれができないのかわかりません –

+2

あなたのエラーはあなたのコードと一致しません。可能であれば、正確なSQLクエリを投稿する必要があります。 – sgriffinusa

答えて

3

投稿した声明に間違いはありません。エラーは他の場所にあります。

間違ったクエリを投稿できましたか?あるいはそれを過度に単純化したのでしょうか?

UPDATE MyTable 
SET a = 2 
WHERE b = 1 AND c = (SELECT c FROM MyTable2 WHERE id = 5) 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <--- subquery 

あなたが得るエラーメッセージを与えることができる、無効なクエリは次のようになります:

UPDATE MyTable 
SET a = 2 
WHERE b = 1 AND c = (SELECT c, d FROM MyTable2 WHERE id = 5) 

それは二つの値が、=を返すため、2番目のクエリが無効であるサブクエリは、次のようになります演算子は単一の値との比較のみを許可します。

解決策は、等価比較で使用されるすべてのサブクエリが、単一の列で構成される単一の行のみを返すようにすることです。