SQL Update电子邮件列,包含名字和姓氏

时间:2016-02-25 11:35:31

标签: sql oracle concat

添加到电子邮件列,来自actor表的firstname和last_name。它的格式必须为firstname.lastname@email.com 所有更新

修改 :(复制OP自己的评论)

UPDATE ACTOR
    SET EMAIL = (SELECT FIRST_NAME || '.' || LAST_NAME || '@SAKILLA.COM' FROM ACTOR

2 个答案:

答案 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'));