更新有条件的表

chr*_*sto 2 sql sql-server-2008

我有以下问题:

我有桌子:

TEST_TABLE
x_Id|y_Id
---------
   2|   7
   2|   8
   3|   7
   4|   7
   5|   8
Run Code Online (Sandbox Code Playgroud)

如果x_Id有y_Id(7)和y_Id(8),我想删除记录.如果y_Id = 8且y_Id(7)在唯一x_Id中不存在,则将y_Id更新为7.

x_Id和y_Id是复合键.

结果示例:

TEST_TABLE
x_Id|y_Id
---------
   2|   7
   3|   7
   4|   7
   5|   7
Run Code Online (Sandbox Code Playgroud)

rab*_*dde 5

删除重复项(x_Id同时存在y_Id的7和8)并更新所有剩余的y_Id,其中y_Id = 8

DELETE FROM TEST_TABLE t1 WHERE y_Id=8 AND EXISTS (SELECT * FROM TEST_TABLE WHERE x_Id=t1.x_Id AND y_Id=7)
UPDATE TEST_TABLE SET y_Id=7 WHERE y_Id=8
Run Code Online (Sandbox Code Playgroud)