sql >> データベース >  >> RDS >> Oracle

ORA-01427エラーを解決するにはどうすればよいですか(単一行のサブクエリは複数の行を返します)?

    db2.CENSUSに複数の行が存在するため、エラーが発生します 少なくともuidの値の場合 。 (もっとあるかもしれません。)uidのどの値を把握することができます 次の手順で問題が発生しています:

    SELECT uid, COUNT(*)
      FROM db2.census
     GROUP BY uid
    HAVING COUNT(*) > 1;
    

    その時点で、あなたは多くのことをすることができます。余分な行を削除して(多分それほど多くなく、とにかくそれらを望まない)、元のクエリのように更新するか、更新に使用しているサブクエリで集計を使用できます。例:

    update db1.CENSUS set (notes)
    =
    (
            select MAX(notes)
            from db2.CENSUS cen
            where  db1.CENSUS.uid = cen.uid
    
    )
    where headcount_ind = 'Y' and capture_FY = '2015';
    

    さらに、notesの対応する値がない場合は、上記の方法でクエリを実行します db2.CENSUSdb1.CENSUS.uidの値の場合 、db1.CENSUS.notes NULLに設定されます 。多分それはあなたが望む行動ですか?そうでない場合は、次のようなものが必要になります。

    UPDATE db1.census c1
       SET c1.notes = ( SELECT max(c2.notes)
                          FROM db2.census c2
                         WHERE c2.uid = c1.uid )
     WHERE c1.headcount_ind = 'Y'
       AND c1.capture_FY = '2015'
       AND EXISTS ( SELECT 1 FROM db2.census c2
                     WHERE c2.uid = c1.uid );
    


    1. MySQLからPostgreSQLへの移行-知っておくべきこと

    2. MySQLで文字列の左または右の部分を返す方法

    3. PythonのOracleプリペアドステートメントのIN句cx_Oracle

    4. MySqlでUNIONの結果を合計する簡単な方法