添加到电子邮件列,来自actor表的firstname和last_name。它的格式必须为firstname.lastname@email.com 所有更新
修改 :(复制OP自己的评论)
UPDATE ACTOR
SET EMAIL = (SELECT FIRST_NAME || '.' || LAST_NAME || '@SAKILLA.COM' FROM ACTOR
答案 0 :(得分:2)
以下是您的查询无效的原因:
UPDATE ACTOR SET EMAIL =
(SELECT FIRST_NAME || '.' || LAST_NAME || '@SAKILLA.COM' FROM ACTOR);
您更新表ACTOR的所有记录。对于每条记录,您将EMAIL设置为您使用子查询确定的值。但子查询不会选择一个值,而是选择多个值,单独执行子查询时可以轻松看到这些值。这不起作用,因为查询是记录的迭代记录,并且每个记录只能分配一个值,当然。
为了让这样的东西工作,你必须将子查询与主查询联系起来。 (当您访问同一个表时,必须为其指定别名,因此DBMS会查看您是在讨论主查询或子查询中的记录。
UPDATE ACTOR MAIN SET EMAIL =
(
SELECT SUB.FIRST_NAME || '.' || SUB.LAST_NAME || '@SAKILLA.COM'
FROM ACTOR SUB
WHERE SUB.ACTOR_ID = MAIN.ACTOR_ID
);
但正如您已从其他答案中看到的那样:为什么要使用子查询?查看主查询中的记录时,您已经拥有构建电子邮件地址所需的所有值。
UPDATE ACTOR SET EMAIL = FIRST_NAME || '.' || LAST_NAME || '@SAKILLA.COM';
答案 1 :(得分:0)
您尚未指定正在使用的数据库,但它可能正是您要查找的内容。
UPDATE actor SET email = CONCAT(CONCAT(firstname, '.'), CONCAT(lastname, '@email.com'));