【发布时间】:2014-04-02 23:46:28
【问题描述】:
我有一个包含行的 MSSQL 表,我需要更新其中的一些行,具体取决于同一个表中是否存在其他行。表格和示例数据如下所示:
SQL 表:
TABLE tblConnector(
ID1 [int] NOT NULL,
ID2 [int] NOT NULL,
ID3 [int] NOT NULL,
...other cols...)
具有由 ID1、ID2 和 ID3 组成的主键集群 - 意味着复合键必须是唯一的。
数据结构:
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 值,ID3 = 9999。
在我的示例数据中,我只想更新第 3 行,设置 ID3 = 9999 - 因为它的 ID3 = 1 并且表中没有其他行具有相同的 ID1 和 ID2 值(其中 ID3 1 )。我不想更新最后一行 - 所以使用 count() 来隔离行不是一种有效的方法。
我已经尝试了无数次尝试将表连接到自身,但我似乎无法获得只会影响我想要的行的 UPDATE 语句。
关于如何编写此 SQL 的任何建议?
更新:我应该更清楚 - 如果 ID3 中的当前值为 1,我想将 ID3 列更新为 9999 ONLY ...并且有没有其他具有相同 ID1 和 ID2 值且 ID3 = 9999 的行。ID1、ID2 和 ID3 组成一个唯一键,并且在 ID3 中设置 9999 不能复制已经存在的键值。
【问题讨论】:
标签: sql-server sql-update multiple-columns self-join