更新父表

时间:2014-10-28 20:17:22

标签: sql sql-server

我有两个表,即profiletable_1profile是父表,table_1是子表。我在两个表中都有email列,我想要做的是例如子表列'me@mail.com'中的email应该更新父表列record的每一列使用1,其中父email列为me@mail.com

在where语句中我使用两个表的两个主键来执行它但由于它们不相同而导致错误。

update profile 
  set record= (
               select table_1.record
                 from Table_1
                where profile.profile_id = Table_1.profile_id
              )

但是当我使用下面的这个我知道会工作的时候会给我一个错误"Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >="

update profile 
  set record = (
               select table_1.record
                 from Table_1
                where profile.email = Table_1.email
              )

请如何使更新与电子邮件列一起使用,而不是主键列

3 个答案:

答案 0 :(得分:2)

如果记录在功能上依赖于电子邮件,则派生一组电子邮件,记录并使用该电子邮件进行更新

with s as (select distinct email, record from table1)
update t
set record = s.record
from profile t
join s on s.email = t.email

如果是s,则发送电子邮件/ - &amp; gt;记录然后你不能保证你从加入获得的记录

答案 1 :(得分:0)

我认为这是你可能想要的:

update P
set P.record= T.record
from profile P
Inner Join Table_1 T
    ON P.profile_id = T.profile_id

P中与T中的ProfileId匹配的任何行都会得到它&#34;&#34;记录&#34;列更新了T&#39; s&#34;记录&#34;列。

您可以修改它以使用JOIN中的其他列。您还可以在代码的SET部分中添加多个要更新的列。

答案 2 :(得分:0)

由于这是父子表,因此您必须具有一些连接条件。 我认为您需要在上面的答案中提到的查询末尾添加where条件:

        update P
        set P.record= T.record
        from profile p 
        Inner Join Table_1 T
        ON (Since parent-child, you must have a joining condition)
        where p.email = t.email