【问题标题】:set a row equal to another row in the same table apart the primary key column设置一个行等于同一个表中的另一行除了主键列
【发布时间】:2014-10-22 07:52:08
【问题描述】:

我使用的是 SQL Server 2012。

我想更新表中的一行,使其等于同一表中除主键字段之外的另一行的值,请参见下面的示例。最好的方法是什么?

 Primary Key      Field One     Field Two    Field Three
 ABS              5             6            2
 NJK              3             2            3

所以更新查询应该返回一个类似的结果,

 Primary Key      Field One     Field Two    Field Three
 ABS              5             6            2
 NJK              5             6            2

【问题讨论】:

  • 最好的方法是编写简单的更新查询。到目前为止,您尝试过什么?

标签: sql-server


【解决方案1】:
UPDATE x
SET
  x.[Field One] = y.[Field One],
  x.[Field Two] = y.[Field Two],
  x.[Field Three] = y.[Field Three]
FROM 
  <tablename> x
JOIN 
  <tablename> y
ON
  x.[Primary Key] = 'NJK' AND
  y.[Primary Key] = 'ABS'

【讨论】:

  • 如果添加第三行会怎样?
  • @HHH 我不明白这个问题?这不是触发器。添加第三行时不会发生任何事情。此查询不会影响第三行,因为主键是唯一的(如果它确实是主键,则命名列主键不会使其成为主键)。所以它永远不会受到这个查询的影响
  • 在他的问题中,只有 2 条记录(NJK 和 ABS)。如果有第三条记录是 HHH。这将被排除在更新之外,对吧?如果他要一次更新20条记录,是不是很难在ON条件下给每个条件?
  • @HHH 如果有主键 HHH 它不会在我的回答中受到影响。不过,它会在 Jithin Shaji 的回答中受到影响。所有行都将受到影响,因此这是一个危险的答案。
【解决方案2】:
UPDATE  A
SET     A.[Field One] = B.[Field One],
        A.[Field Two] = B.[Field Two],   
        A.[Field Three] = B.[Field Three]
FROM    [table] A
CROSS JOIN (SELECT * FROM [table] WHERE [Primary Key] = 'ABS') B

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 2015-07-31
    • 2014-08-26
    • 1970-01-01
    • 2011-12-10
    • 2016-12-01
    • 2013-07-10
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多