所以我试图用我从其他表获得的一些值更新我的Vorschlagspakete表。确切地讲,我想将3个值写入主表。 Atm看起来像这样:
update vorschlagspakete
set (paketid, verkaufsstelleid) = (
select k.paketid, k.verkaufsstelleid
from Konfiguration k, bewertung b
where k.konfigurationsid = b.konfigurationsid
group by k.paketid, k.verkaufsstelleid
having avg(b.sterne) >= 5);
但是每次我尝试这样做都会导致ora-01427。
答案 0 :(得分:1)
您收到的错误,ORA-01427,表示太多行(由子查询返回)。例如,基于斯科特的模式(因为我没有您的表),它看起来像这样:
SQL> update emp e set
2 (e.ename, e.job) = (select d.dname, d.loc from dept d);
(e.ename, e.job) = (select d.dname, d.loc from dept d)
*
ERROR at line 2:
ORA-01427: single-row subquery returns more than one row
为什么不起作用?因为子查询返回的不止一行!
SQL> select d.dname, d.loc from dept d;
DNAME LOC
-------------- -------------
ACCOUNTING NEW YORK
RESEARCH DALLAS
SALES CHICAGO
OPERATIONS BOSTON
SQL>
那么,如何将所有这些值放入EMP表的一行中?显然,那是行不通的,因此您必须执行某些操作以限制行数。怎么样?这得看情况。
有时DISTINCT
会有所帮助,例如
select distinct d.dname, d.loc from dept d
有时还可以使用其他WHERE
条件,例如
select d.dname, d.loc from dept d
where d.location = 'NEW YORK'
有时与要更新的表联接会有所帮助,例如
select d.dname, d.loc from dept d where d.deptno = e.deptno
这导致
SQL> update emp e set
2 (e.ename, e.job) = (select d.dname, d.loc from dept d where d.deptno = e.deptno);
14 rows updated.
您应该怎么做?我不知道,我们没有您的数据。看看上面写的东西是否有帮助。