晚上好! 我有一个问题,我无法弄清楚如何解决。我想要运行的查询应该将每个人的电子邮件地址更改为给定的一个,但是我收到错误消息"单行子查询返回多行"
update employees
set email = ( select regexp_replace(email,'@([a-z])+','@company')
from employees
)
where id = (select id
from employees);
我做错了什么?
答案 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将检查由子查询结果给出的值。 但是'='只需要子查询结果中的一个等价值。