SQL 从另一个表中的另一列更新一列

Posted

技术标签:

【中文标题】SQL 从另一个表中的另一列更新一列【英文标题】:SQL update one column from another column in another table 【发布时间】:2011-04-18 15:00:19 【问题描述】:

在此之前我阅读了各种帖子。但它们似乎都不适合我。

正如标题所示,我正在尝试从另一个表中的一列更新一列。我不记得以前有这个问题..

1. 表:user_settings.contact_id,我要更新为contacts.id where (user_settings.account_id == contacts_account_id)

2. 以前,联系人是通过 account_id 链接到用户帐户的。但是,现在我们想通过contacts.id 将联系人链接到user_settings

以下是我尝试过的一些示例,尽管它们都没有奏效。我会对 A.) 为什么它们不起作用和 B.) 我应该怎么做。

示例 A:

UPDATE user_settings
SET user_settings.contact_id = contacts.id 
FROM user_settings 
INNER JOIN contacts ON user_settings.account_id = contacts.account_id

示例 B:

UPDATE (SELECT A.contact_id id1, B.id id2
  FROM user_settings A, contacts B
  WHERE user_settings.account_id = contacts.account_id)
SET id1 = id2

示例 C:

UPDATE user_settings
SET user_settings.contact_id = (SELECT id
  FROM contacts
  WHERE (user_settings.account_id = contacts.account_id)
WHERE EXISTS ( user_settings.account_id = contacts.account_id )

我觉得我的大脑刚刚对我关闭,如果有任何颠簸重新启动它,我将不胜感激。谢谢:)

【问题讨论】:

有人能告诉我为什么这被否决,这样我以后就可以避免它了吗? 【参考方案1】:

根据 mysql 文档,要进行跨表更新,您不能使用连接(就像在其他数据库中一样),而是使用 where 子句:

http://dev.mysql.com/doc/refman/5.0/en/update.html

我认为这样的事情应该可行:

UPDATE User_Settings, Contacts
    SET User_Settings.Contact_ID = Contacts.ID
    WHERE User_Settings.Account_ID = Contacts.Account_ID

【讨论】:

谢谢,我确实只是把我的数据库弄混了。你一打字,齿轮就开始搅动了。 您的答案正是我想要的。如果您更改表名和列名以匹配我的,它可能会使答案更好地匹配问题。再次感谢!【参考方案2】:
Update tabelName Set SanctionLoad=SanctionLoad Where ConnectionId=ConnectionID
go
update tabelName  Set meterreading=meterreading where connectionid=connectionid
go
update tabelName  set customername=setcustomername where customerid=customerid

【讨论】:

有一些上下文会很好,例如解释 go-keyword。我意识到答案已经 8 岁了,但仍然如此。

以上是关于SQL 从另一个表中的另一列更新一列的主要内容,如果未能解决你的问题,请参考以下文章

从另一列计算的列?

pl/sql-create trigger on a table - 每当在同一个表中插入新记录时,应更新表的另一列

从另一列的子字符串更新一列

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

如何用另一个表中的另一列替换一列数据?

表中的一列引用 SQL 中存在重复数据的另一列