首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图更新表,但我总是得到或-01427

试图更新表,但我总是得到或-01427
EN

Stack Overflow用户
提问于 2019-06-05 18:50:11
回答 1查看 31关注 0票数 0

所以我试图用我从其他表中得到的值来更新我的Vorschlagspakete表。确切地说,我想将3个值写入主表中。ATM机看起来是这样的:

代码语言:javascript
复制
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);

但每次我试一次,结果都是-01427。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 20:05:14

您得到的错误ORA-01427意味着太多行(由子查询返回)。例如,基于Scott的模式(因为我没有您的表),如下所示:

代码语言:javascript
复制
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

为什么不起作用?因为子查询返回的不仅仅是一行!

代码语言:javascript
复制
SQL> select d.dname, d.loc from dept d;

DNAME          LOC
-------------- -------------
ACCOUNTING     NEW YORK
RESEARCH       DALLAS
SALES          CHICAGO
OPERATIONS     BOSTON

SQL>

那么,如何将所有这些值放入EMP表的一行中呢?显然,这是行不通的,所以您必须做一些事情来限制行数。多么?那得看情况了。

  • 有时DISTINCT会有所帮助。 从部门d中选择distinct d.dname,d.loc
  • 有时附加的WHERE条件会有所帮助。 从部门d选择d.dname,d.loc,其中d.location = 'NEW‘
  • 有时,加入要更新的表会有所帮助。 从部门d中选择d.dname,d.loc,其中d.deptno = e.deptno 这导致了 SQL>更新emp e set 2 (e.ename,e.job) =(从dept选择d.dname,d.loc,其中d.deptno = e.deptno);14行更新。

你应该怎么做?我不知道,我们没有你的数据。看看上面写的东西是否有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56466385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档