"单行子查询返回多行"

时间:2016-12-20 17:46:49

标签: mysql oracle-sqldeveloper

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

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

我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

您的第一个子查询毫无意义且不起作用,WHERE子句中的第二个子查询需要更改为IN运算符。

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

答案 1 :(得分: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);

  

块引用

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