【发布时间】:2014-04-03 13:04:02
【问题描述】:
我在 SQL Server 中有一个表,其中包含行,我需要更新其中的一些行,具体取决于同一个表中是否存在其他行。表格和示例数据如下所示:
SQL Server 表:
TABLE tblConnector(
ID1 [int] NOT NULL,
ID2 [int] NOT NULL,
ID3 [int] NOT NULL,
...other cols...)
它在 (ID1, ID2, ID3) 上有一个 PRIMARY KEY CLUSTERED - 这意味着复合键必须是唯一的。
样本数据:
ID1 ID2 ID3
-------------
111 222 1
111 222 9999
333 444 1 <--- update only this row
555 666 1
555 666 9999
777 888 2
777 888 9999
123 456 3 <--- don't update this row
我需要更新此表中的任何行,设置ID3 = 9999,其中ID3 当前为1,并且表中没有其他行具有与ID1 和ID2 相同的值,@987654329 @。
在我的示例数据中,我只想更新第 3 行,设置 ID3 = 9999 - 因为它有 ID3 = 1 并且表中没有其他行具有相同的 ID1 和 ID2 值(其中ID3 <> 1)。我不想更新最后一行 - 所以使用 count() 来隔离行不是一种有效的方法。
我想将 ID3 列更新为 9999 仅如果 ID3 中的当前值为 1 ...并且没有其他行具有相同的 ID1 和 ID2 值且 ID3 = 9999。 ID1、ID2 和 ID3 组成一个唯一键,在 ID3 中设置 9999 不能复制已经存在的键值。
我已经尝试了无数次尝试将表连接到自身,但我似乎无法获得只会影响我想要的行的 UPDATE 语句。
关于如何编写此 SQL 的任何建议?
【问题讨论】:
标签: sql sql-server sql-update self-join