0

別のテーブルから情報をコピーして属性を更新する必要があります。唯一の問題は、基本的にこの形式に従わなければならない必要な情報を特定することです。char_wait_chg をモデルと航空機から mod_wait_chg を選択した結果と等しくなるように設定することにより、チャーター テーブルを更新します。AC_Number と CHAR_WAIT_CHG を含む Charter テーブル、AC_Number と MOD_CODE を含む Aircraft テーブル、MOD_CODE と MOD_WAIT_CHG を含む Model テーブルがあります。CHAR_WAIT_CHG を MOD_WAIT_CHG と等しくする必要があります。サブクエリを使用できると思っていましたが、エラー ORA-01427: single-row サブクエリが複数の行を返します。これが私が試したことです:

    UPDATE CHARTER 
    SET CHAR_TOT_CHG=(SELECT MOD_WAIT_CHG FROM MODEL JOIN AIRCRAFT USING(MOD_CODE) JOIN CHARTER USING(AC_NUMBER));

これを十分に説明したことを願っています。

4

1 に答える 1

1

これはあなたの質問です。サブクエリが複数の行を返しています:

UPDATE CHARTER 
    SET CHAR_TOT_CHG = (SELECT MOD_WAIT_CHG
                        FROM MODEL JOIN
                             AIRCRAFT
                             USING(MOD_CODE) JOIN
                             CHARTER
                             USING(AC_NUMBER)
                       );

これを 1 行に変換する方法を決定する必要があります。

最初の可能性は、サブクエリが間違っていることです (3 つのテーブルからすべての行を返すため)。

サブクエリに別のコピーをcharter含めるつもりがない場合は、相関サブクエリにして、すべてのテーブルのすべての行を返さないようにします。

UPDATE CHARTER 
    SET CHAR_TOT_CHG = (SELECT MOD_WAIT_CHG
                        FROM MODEL JOIN
                             AIRCRAFT
                             USING(MOD_CODE)
                        where charter.ac_number = aircraft.ac_number
                       );

それは問題を解決するかもしれないし、しないかもしれません。まだ重複がある可能性があり、それらをどうするかを決定する必要があります。

任意の行で問題ない場合は、次を追加します。

where rownum = 1

min()値の/ max()/ sum()/が必要な場合はavg()、次を使用します。

    SET CHAR_TOT_CHG = (SELECT sum(MOD_WAIT_CHG) . . .

重複を返すべきでない場合は、データをさらに調査してください。

于 2013-07-21T22:16:44.143 に答える