1

アクティブ化されたいくつかのアカウントを非アクティブ化するクエリがあります。基本的に、year_end_close テーブルを確認し、そこに存在するすべてのアカウントをマスター テーブルで非アクティブ ステータス (A または B) に更新します。

update master
 set account_type = case account_type
  when 'C' then 'A'
  when 'D' then 'B'
  else account_type
 end
where account_num = 
      (select account_num 
       from year_end_close 
       where account_type in('C', 'D'))`

where句から「サブクエリが複数の値を返しました」と表示されます-何が間違っていますか? where句をコメントアウトすると、そのエラーが発生しなくなったので、その句の何かです。

4

3 に答える 3

2

に変更=しますIN

UPDATE master
SET account_type =
   CASE account_type
      WHEN 'C' then 'A'
      WHEN 'D' then 'B'
      ELSE account_type
   END
WHERE account_num IN
(
   SELECT account_num
   FROM year_end_close
   WHERE account_type IN('C', 'D')
)

を使用する=ことで、 の左側の 1 つのアイテムと右側の 1 つのアイテムを比較することを意味します=。またはaccount_numのが複数ありyear_end_closeます。これにより、サブクエリは複数の結果を返します。クエリは、サブクエリのどの値が左側の値と一致する必要があるかを判断できません。を使用すると、クエリは、サブクエリからの有効な左の値をチェックできます。account_typeCDINaccount_num

于 2013-04-09T23:00:30.243 に答える
0

等しいかどうかをチェックするのではなく、IN を試してください。

update master
 set account_type = case account_type
  when 'C' then 'A'
  when 'D' then 'B'
  else account_type
 end
where account_num IN (select account_num from year_end_close where account_type in('C', 'D'))`

...ただし、データ/スキーマに依存します。

于 2013-04-09T23:00:22.397 に答える