首页 文章

“单行子查询返回多行”

提问于
浏览
-2

晚上好!我有一个问题,我无法弄清楚如何解决 . 我想运行的查询应该将每个人的电子邮件地址更改为给定的,但我收到错误消息“单行子查询返回多行”

update employees
set email =  ( select regexp_replace(email,'@([a-z])+','@company')
              from employees
             )
where id = (select id
        from employees);

我究竟做错了什么?

2 回答

  • 0
    update employees 
    set email = regexp_replace(email,'@([a-z])+','@company') 
    where id IN (select id from employees);
    

    您的第一个子查询是没有意义的,不起作用,WHERE子句中的第二个子查询需要更改为IN运算符 .

    而且,WHERE语句没有意义 . 您已经在更新Employee表中的每个id . 所以只需删除它 .

  • 0

    如果您的第二个子查询只返回一行,那么您可以使用

    update employees set email = ( select regexp_replace(email,'@([a-z])+','@company') where id = (select id from employees);

    否则,如果您的第二个子查询返回多行,那么您应该使用

    update employees set email = ( select regexp_replace(email,'@([a-z])+','@company') where id IN (select id from employees);

    Blockquote

    因为IN将检查由子查询结果给出的值 . 但是'='只需要子查询结果中的一个等 Value .

相关问题