-2

次の更新スクリプトを実行する必要があります

update table1 set col1 = 'xxxx', 
col2 = (select cc.client_type
        from table2 t2, table3 t3, table1 t1
        where t2.col3='YYY' 
        AND t3.col4 != 'aaa'
        AND t3.col5 = 'Y'
)

次のエラーが表示されます

Error report:
SQL Error: ORA-01427: single-row subquery returns more than one row
01427. 00000 -  "single-row subquery returns more than one row"

Oracle 10g を使用しています。これに関するヘルプはありますか??

4

2 に答える 2

1
update table1 t set col1='xxx',
col2= (select cc.client_type from table2 t2, table3 t3
where t2.col3='YYY' 
    AND t3.col4 != 'aaa'
    AND t3.col5 = 'Y'
    AND t2.random_col=t3.random_col)

必要なレコードを更新します (内部クエリが 1 行のみを返す場合)。ただし、定数値になります (ここで、random_col は table2 と table3 の両方に関連付けることができる列であり、random_col2 は table3 と table1 の両方に関連付けることができる列です)。

別の可能性は次のとおりです。

update table1 t set col1='xxx',
    col2= (select cc.client_type from table2 t2, table3 t3
    where t2.col3='YYY' 
        AND t3.col4 != 'aaa'
        AND t3.col5 = 'Y'
        AND t2.random_col=t3.random_col
        AND t3.randome_col2=t.random_col2)

上記は、table2 と table3 に応じて異なる (または同じ) 値で table1 を更新します。

于 2013-01-08T17:58:51.863 に答える
0

あなたが得ているエラーは、それが述べているように、サブクエリが複数の行を返しているためです。クエリは、現在同じデータで table1 全体を更新しています。外部クエリの各行に対してサブクエリで1行を取得できるように、何らかの形で外部table1参照に参加することをお勧めします。何かのようなもの

update table1 t0 set col1 = 'xxxx', 
col2 = (select cc.client_type
    from table2 t2, table3 t3, table1 t1
    where t2.col3='YYY' 
    AND t3.col4 != 'aaa'
    AND t3.col5 = 'Y'
    AND t0.colx = t1.colx
)
于 2013-01-08T18:05:55.620 に答える