【问题标题】:Scalar subquery contains more than one row标量子查询包含多于一行
【发布时间】:2016-11-12 17:00:35
【问题描述】:

我正在使用 H2 数据库并想移动一些数据。为此,我创建了以下查询:

UPDATE CUSTOMER
SET EMAIL = SELECT service.EMAIL
FROM CUSTOMER_SERVICE AS service
INNER JOIN CUSTOMER AS customer ON service.ID = customer.CUSTOMER_SERVICE_ID;

当我现在在 H2​​ 控制台中执行它时,我收到以下错误:

Scalar subquery contains more than one row; SQL statement:

UPDATE CUSTOMER
SET EMAIL = SELECT service.EMAIL
FROM CUSTOMER_SERVICE AS service
INNER JOIN CUSTOMER AS customer ON service.ID = customer.CUSTOMER_SERVICE_ID [90053-192] 90053/90053 (Hilfe)

这个错误告诉我什么?

编辑

我想通过查询实现什么:

实际上每个CUSTOMER 都有一个CUSTOMER_SERVICE。我只是想将COLUMN EMAILCUSTOMER_SERVICE 移动到CUSTOMER 表。为此,我已经向用户添加了一个电子邮件列。我希望能够用我的查询来做到这一点,但显然不是。

【问题讨论】:

    标签: sql h2


    【解决方案1】:

    您的查询在语法上无效(所有子查询都必须有括号)。

    您缺少的是相关性子句。我相信你想要:

    UPDATE CUSTOMER c
        SET EMAIL = (SELECT cs.EMAIL
                     FROM CUSTOMER_SERVICE s
                     WHERE s.ID = c.CUSTOMER_SERVICE_ID
                    );
    

    我不知道这应该是什么:[90053-192] 90053/90053 (Hilfe)

    【讨论】:

    【解决方案2】:

    您的选择查询返回不止一行。如果您不希望这样做,则需要执行聚合或 LIMIT 1 之类的操作。

    【讨论】:

    • 但我希望对我拥有的每个客户执行 taht 查询。
    【解决方案3】:

    您对至少一位客户的子查询有多个电子邮件地址。

    你可以... (Select top 1 serverice.email ...... (Select max(serverice.email) ...

    Update Customer Set EMail=B.Email
     From  Customer A
     Join  (Select ID,max(EMail) as EMail From CUSTOMER_SERVICE Group By ID) B
       on  (A.CUSTOMER_SERVICE_ID = B.ID)
    

    【讨论】:

    • @Mulgard BINGO!
    • @Mulgard 我的第一选择是 max() 选项
    • @Mulgard 如果有多封电子邮件,您是否希望将它们视为 DISTINCT 分隔字符串?
    • @Mulgard 如果有多个不同的电子邮件,您要输入最后一个吗?
    • @Mulgard 查看更新的答案...完整更新声明
    【解决方案4】:

    我在这种错误类型上花了很多时间(数据库中不应有重复项)。
    最后我通过 SQL 发现了 COUNT 的问题,如下所示:

    UPDATE CUSTOMER
    SET EMAIL = SELECT COUNT(service.EMAIL)
    FROM CUSTOMER_SERVICE AS service
    INNER JOIN CUSTOMER AS customer ON service.ID = 
    customer.CUSTOMER_SERVICE_ID;
    

    然后用EMAIL!='1'选择问题行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2017-11-02
      • 1970-01-01
      相关资源
      最近更新 更多