删除同一查询中的多个行

时间:2016-05-13 21:58:55

标签: sql sql-server tsql

假设我有一张表格,可以在CUSTOMER_IDB_CODE之间建立关系。 有多个CUSTOMER_ID具有不同B_CODE的实例。我正在创建一个能够根据交换列表UI添加和删除此表中的代码的UI。我知道如何在同一个查询中插入多行,但我不确定在删除时如何执行相同操作。

我知道我可以删除所有CUSTOMER_ID的所有实例,然后添加列表中剩下的内容。但这似乎是一种不好的方式。

那么如何在同一个查询中删除该表上具有相同ID,不同代码的多行,但是不删除所有此类ID的实例?

所以例如我得到了这个

+------------+---------+
| 123        | A       |
| 124        | B       |
| 123        | C       |
| 123        | D       |
| 124        | E       |
| 123        | F       |
+------------+---------+

我只想删除 123 -> A123 -> C123 -> F但不是123 -> D,并且在同一查询中。

2 个答案:

答案 0 :(得分:0)

SqlFiddle

(a) 如果您要删除您知道b_code的所有行:

delete from t where customer_id = 123 and b_code in ('A','C','F');

(b) 或者,如果您要删除除代码

之外的所有行
delete from t where customer_id = 123 and b_code not in ('D');
  

如果您选择删除少量b_codes,请使用(a)。

     

如果您要保留少量b_codes,请使用(b)。

答案 1 :(得分:0)

如果我了解您有一个允许每个客户删除多个代码的UI。我不确定选择保存哪条记录的标准是什么。在您的示例中,您选择D.在UI场景中,我认为用户不会选择D进行删除。

对于根问题,如果我理解正确,您可以使用Row_Number和或Rank来查询要删除的记录。因为您在示例中选择D,所以您不能依赖于窗口函数中的简单顺序,您可能需要有一个排序字段或相关表格,以确保您选择正确的“守护者”记录。