【问题标题】:SQL: How to self-reference a column in update statements?SQL:如何在更新语句中自引用列?
【发布时间】:2012-01-03 07:13:05
【问题描述】:

我有两个包含这些列的表:

用户: 用户、班级、年级、地点。

类: 班级、地点

Users表的class列引用Classes表中的相同列。

我想更新用户表中的所有行,使用户表的“位置”列的每一行都等于类的位置。

所以我有一行值: 迈克,数学,A+,纽约

数学类表中对应的行是: 数学,芝加哥

我希望用户表的行变为 Mike,数学,A+,芝加哥。

谢谢

【问题讨论】:

  • 您可能需要考虑规范化您的数据。如果位置只依赖于类,为什么还要将其存储在用户表中?

标签: sql sybase


【解决方案1】:
update
  users
set
  users.location = classes.location
from
  classes
where
  classes.class = users.class

【讨论】:

  • 我不相信这是有效的语法
  • 是的,它是有效的语法,至少在 MS SQL Server 中是这样,我很确定它与 Sybase 非常相似,可以在这里应用。
  • 好的,BTW 没有投反对票,请投反对票的人提供指向此处指定错误的文档的链接吗?同时 +1 进行补偿。
【解决方案2】:

这个怎么样:

UPDATE U 
SET U.Location = C.Location
FROM Users AS U
INNER JOIN Classes AS C ON C.Class = U.Class
                AND C.Location != U.Location
 ;

【讨论】:

  • +1 用于使用连接。为什么我总是看到 SQL 问题的答案,其中连接被省略以支持子选择?
【解决方案3】:
update users a
    set a.location =
     (select b.location 
      from classes b
      where b.class = a.class) 

【讨论】:

  • 我看不出有什么必要。
  • 错误处理也不是必需的,但它是一种很好的做法。
  • @Maess,如果您说明为什么加入会更好,您可能会对您的事业有所帮助。
猜你喜欢
  • 2011-02-17
  • 2016-01-30
  • 2014-12-05
  • 2015-05-09
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多