人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

内容が不十分だったので再投稿します。

以下のAccessで実行していたSQLがあります。

UPDATE TABLEA INNER JOIN TABLEB ON TABLEA.column1 = TABLEB.column1 SET TABLEA.column1 = TABLEB.column2

テーブル名をそのままでOracleで全く同じ結果になるように修正しようと思っています。
で以下のSQLを作成したのですが

Update TableA set TableA.Column1 = (select TableB.Column2 from TableB where TableB.Column1 = TableA.Column1)

ORA-01427: single-row subquery returns more than one row
になり実行できません。
どのようにすれば同じ結果になるでしょうか?
Oracleは厳密なため同じような処理は出来ないのでしょうか?

出来るだけ影響度の少ない方法で出来ればなと思ってます。
よろしくお願いします。

●質問者: matttsu
●カテゴリ:コンピュータ
✍キーワード:access MORE ON ONE Oracle
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● mass3
●60ポイント

エラーメッセージのとおりです。

「単行副問合せが1行以上の行を返しました」

したがって、副問合せ

「select TableB.Column2 from TableB where TableB.Column1 = TableA.Column1」

が必ず1行しか返らないようにすればいいです。

この例だと、「TableB.Column1」をプライマリキーかユニークキーにすればいいです。

◎質問者からの返答

「ROWNUM=1で結果は同じになる」ことは保障されません。

とのことですが現行のAccessはどういう動きでOracleで同じ結果を出すためにはどうすればいいのかを知りたかったのです。

今回Accessと同じ結果をという目的が最優先のためテーブルの正規化は出来ればというところです。

新規に作成するのであれば当然「TableB.Column1」を一意にしたいのですが…。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ