我需要运行以下更新脚本</ p>
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。 对此有何帮助?
答案 0 :(得分: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的不同(或相同)值答案 1 :(得分: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
)