【问题标题】:Set column value after joining two table in SQL Server在 SQL Server 中连接两个表后设置列值
【发布时间】:2019-01-07 20:35:39
【问题描述】:

表 1:tb1

|ID|Reference|
|1|ABCD|
|2|EFGH|
|3|IJKL|
|4|MNOP|
|5|MNOP|

表 2:tb2

|Reference  |UpdatedID  |
|ABCD       |           |
|ABCD       |           |
|EFGH       |           |
|EFGH       |           |
|EFGH       |           |
|EFGH       |           |
|IJKL       |           |
|MNOP       |           |
|MNOP       |           |

我需要在tb1的基础上更新表tb2的一个空列。

要加入的公共列是两个表的Reference 列,其中tb1 的ID 将更新为tb1 表的UpdatedID 列。

应用连接列后,记录会增加,因为在tb1 表中相同的Reference 具有不同的 ID,需要在tb2 表中更新相同的 ID。

我应该如何进行。

使用的 JOIN 查询:

select 
    A.csvRefNumber,
    A.reference,
    B.reference
from 
    tb1 A
left join 
    tb2 B on A.Reference = B.Reference
order by 
    csvRefNumber

需要的输出:

|Reference  |UpdatedID  |
|ABCD       |1          |
|ABCD       |1          |
|EFGH       |2          |
|EFGH       |2          |
|EFGH       |2          |
|EFGH       |2          |
|IJKL       |3          |
|MNOP       |4          |
|MNOP       |5          |

【问题讨论】:

  • 这里需要详细说明。很难弄清楚,你到底想要什么。你能试着改写你的问题吗?您想将这两个表连接起来看看它们之间有什么相似之处吗?
  • ?为什么 MNOP 的两个值会得到不同的 UpdatedID 值?存储这个号码有什么意义?您始终可以在查询时使用 RANK() or DENSE_RANK() over (PARTITION BY Reference) 生成该值。
  • +Aaron 这只是我的大数据集中的一个示例数据,其中有多个这样的可用记录。
  • 如果 tb2 中有另一个 MNOP,updatedId 是什么?
  • +Ajay Gupta 如果 MNOP 在 tb1 表中获得了 ID 6,那么 6 应该在 tb2 表的 UpdatedID 列中得到更新。

标签: sql sql-server sql-server-2005


【解决方案1】:

你可以这样做:

UPDATE b SET b.UpdatedID = a.ID
FROM 
tb1 A
LEFT JOIN tb2 B
ON A.Reference = B.Reference

它基本上是加入表格和更新。我通常(和你一样)从SELECT 语句开始,然后将其更改为UPDATE。然后,通过别名指定要更新的表,最后指定要设置为相等的列(或列)。

【讨论】:

  • 我刚刚更新了所需的输出。所有逻辑与 Reference = MNOP 混在一起
  • 您需要一种方法来JOIN,这样您的SELECT 就会按照您想要的方式对齐。所以你必须有另一种 ID 列。
【解决方案2】:

我想这就是你想要的:

update tb2
    set updateid = tb1.id
    from tb2 join
         tb1
         on tb2.reference = tb1.reference;

【讨论】:

  • 如果我使用上述查询,它将使用 ID = 4 更新引用“MNOP”,我需要在 tb1 表中使用其重复 ID 进行更新。
猜你喜欢
  • 2013-12-10
  • 2014-05-11
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多