2011-05-13 4 views
1
で複数行を更新

私は2つのテーブルUserStatusとUserを持っています。サブクエリ

USERSTATUS 2つのフィールドがあります ユーザー名、ステータス

ユーザーは、二つのフィールド ユーザー名、削除された

これは私が

Update users 
    set deleted = '1' 
where username = (select username 
        from tempDUDPIVOT 
        where status = 'inactive') 

を使用しているクエリですが、エラーを取得しています

サブクエリが2つ以上の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

私はいくつかのバリエーションを試しましたが、解決策を見つけることができません...私は非常に自明な感じがします。

あなたのお手伝いがありがとうございます。

ありがとうございました。

答えて

2

UPDATE構文には、スカラーサブクエリが必要です。​​を使用すると、述語のパラメータを互いに近づけることができます(つまり、クエリを読みやすく保守しやすくなります)。

UPDATE users 
    SET deleted = '1' 
WHERE EXISTS (
       SELECT * 
       FROM tempDUDPIVOT AS T1 
       WHERE T1.status = 'inactive' 
         AND T1.username = users.username 
      ); 

あなたのSQL製品がサポートしている場合にも(ただしここではさらに離れて述語のパラメータに注意してください)標準SQL MERGEを使用することができます。あなたの助けを

MERGE INTO users 
    USING (
      SELECT username 
      FROM tempDUDPIVOT 
      WHERE status = 'inactive' 
     ) AS T1 (username) 
     ON T1.username = users.username 
WHEN MATCHED THEN 
    UPDATE 
     SET users.deleted = '1'; 
+0

感謝を。 SQL2005上では、私はMergeを利用できません。 – Stan

3
Update users set deleted = '1' 
where username IN (select username from tempDUDPIVOT where status = 'inactive') 

IN返される0..inf値を受け入れ、そして=は1つのみ(0ではなく、または42)を受け付けます。