假设我有一张表格,可以在CUSTOMER_ID
和B_CODE
之间建立关系。
有多个CUSTOMER_ID
具有不同B_CODE
的实例。我正在创建一个能够根据交换列表UI添加和删除此表中的代码的UI。我知道如何在同一个查询中插入多行,但我不确定在删除时如何执行相同操作。
我知道我可以删除所有CUSTOMER_ID
的所有实例,然后添加列表中剩下的内容。但这似乎是一种不好的方式。
那么如何在同一个查询中删除该表上具有相同ID,不同代码的多行,但是不删除所有此类ID的实例?
所以例如我得到了这个
+------------+---------+
| 123 | A |
| 124 | B |
| 123 | C |
| 123 | D |
| 124 | E |
| 123 | F |
+------------+---------+
我只想删除
123 -> A
,123 -> C
和123 -> F
但不是123 -> D
,并且在同一查询中。
答案 0 :(得分:0)
(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,所以您不能依赖于窗口函数中的简单顺序,您可能需要有一个排序字段或相关表格,以确保您选择正确的“守护者”记录。