【问题标题】:SQL Server update statement using a join on multiple columns使用多列连接的 SQL Server 更新语句
【发布时间】:2012-04-24 00:38:57
【问题描述】:

这里有点麻烦。

表一:

CID, Name, HID
(001-233, Test1, 12345)

表 2:

CID, Name, HID, Primary
(001-233, Test1, 12345, '')

想要使用名为'Y' 的常量值更新存在与Table1 的连接的Table2

所以声明如下:

UPDATE T2 SET T2.Primary = 'Y'
FROM T2 
INNER JOIN T1 
    ON (T1.CID = T2.CID 
        AND T1.HID = T2.HID)

这条语句最终只是更新了所有的行,就好像它只对一个 id 进行连接而不对另一个进行连接?我最终放弃并通过连接两个 ide 字段 CID+HID 使用单个“id”进行WHERE IN 子查询。但我想了解为什么使用正确的连接不起作用。

Table1 是 CTE..

【问题讨论】:

  • 这应该可行,您能否添加一些您希望不会更新的示例数据?
  • 这对我有用。我想它会更新所有行,因为 T1 中的每一行 T2 都有匹配的行。
  • 不起作用,T1 是 CTE。我不明白这让我发疯。它以另一种方式工作,我只是不明白。
  • @sridawg:你能把查询放在包含 CTE 的地方吗?
  • 对我来说很好用:sqlfiddle.com/#!3/a98ce/9

标签: sql sql-server


【解决方案1】:
update t2 
set (t2.primary) = (select 'Y' from t1 where T1.CID = T2.CID AND T1.HID = T2.HID)

【讨论】:

  • 谢谢,但我想知道为什么传统连接不起作用我已经说过我通过该解决方法解决了它
猜你喜欢
  • 2021-02-19
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多