- ベストアンサー
単一行副問合せにより2つ以上の行が返されるエラーの解決方法
- 単一行副問合せにより2つ以上の行が返されるエラーが発生し、SQLの実行ができません。このエラーが発生する原因や解決方法について解説します。
- table1の特定の列に、table2の特定の列の値を追加・変更するためのSQLを作成しました。しかし、特定の条件が合致する複数の行が存在するため、エラーが発生しました。このエラーの解決方法について詳しく説明します。
- table1とtable2の特定の列を比較し、条件に合致する行の特定の列の値を変更するためのSQLを作成しました。しかし、単一行副問合せにより2つ以上の行が返されるため、エラーが発生しました。このエラーを回避する方法について解説します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1のかたの通りなのですが、 まずは、「table2のcol03が3、table2のcol05が5」で、 col6が同一の行が複数あるはずなので、どのcol06が犯人か探します。 select col06, count(*) from table2 t2 where t2.col03 = 3 and t2.col05 = 5 group by col06 having count(*) > 1 その後、 select col06, * from table2 t2 where t2.col03 = 3 and t2.col05 = 5 and t2.col06 = (探し出したcol06の値) で内容を確認したあと、最終的には 余分なレコードを削除するのか、一意になる他の条件を追加するのか、 重複行にしかならないという限定つきで、DISTINCTしちゃう(下記)とかを判断するのですが、 …ここまで書かなくてもよかったかしら? update table1 set (col01,col02) = (select DISTINCT col01,col02 from table2 t2,table1 t1 where t2.col03 = 3 and t2.col05 = 5 and t2.col06 = t1.col06) where t1.col06 in (select col06 from table2);
その他の回答 (1)
- SaKaKashi
- ベストアンサー率24% (755/3136)
select col01,col02 from table2 t2,table1 t1 where t2.col03 = 3 and t2.col05 = 5 and t2.col06 = t1.col06 で2行以上の結果が出るのが問題です。それは、あなたの作ったSQLがそうなっているからです。
お礼
ありがとうございます。 お礼が遅くなり申し訳ありません。 絞りこまれてでてくると思いこんでいました。
お礼
ありがとうございます。 お礼が遅くなり申し訳ありません。 大変参考になりました。