晚上好!我有一个问题,我无法弄清楚如何解决 . 我想运行的查询应该将每个人的电子邮件地址更改为给定的,但我收到错误消息“单行子查询返回多行”
update employees
set email = ( select regexp_replace(email,'@([a-z])+','@company')
from employees
)
where id = (select id
from employees);
我究竟做错了什么?
2 回答
您的第一个子查询是没有意义的,不起作用,WHERE子句中的第二个子查询需要更改为IN运算符 .
而且,WHERE语句没有意义 . 您已经在更新Employee表中的每个id . 所以只需删除它 .
如果您的第二个子查询只返回一行,那么您可以使用
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将检查由子查询结果给出的值 . 但是'='只需要子查询结果中的一个等 Value .