-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)

将更新必要的记录(假设内部查询只返回一行)。但是,它将是一个常量值(其中 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。我建议以某种方式加入外部 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 回答