我有一个关系表,表格看起来像这样
------------------------
| client_id | service_id |
------------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 1 | 7 |
| 2 | 1 |
| 2 | 5 |
------------------------
我有一个我需要添加的新权限列表,我现在正在做的是,例如,如果我必须为id为1的客户端添加新权限,我会这样做
DELETE FROM myTable WHERE client_id = 1
INSERT INTO ....
有没有更有效的方法我只能删除以后不会插入的那些,只添加新的?
答案 0 :(得分:1)
是的,你可以做到这一点,但在我看来,这不是真正的sql
依赖主题。实际上这取决于您的语言/平台选择。如果您使用强大的平台,例如.NET
或Java
,那么有许多数据库类,例如adapters
,datasets
等等,它们可以为您解决问题,例如查找改变的部分,只更新/插入/删除必要的部分等。
我更喜欢使用hibernate
/ nhibernate
类库。在这种情况下,您甚至不需要在大多数时间编写SQL查询。只需在oop级别执行操作并与数据库同步。
答案 1 :(得分:0)
如果您将新权限放入另一个表中,则可以执行以下操作:
DELETE FROM myTable WHERE client_id in (SELECT client_id FROM tmpTable);
INSERT INTO myTable AS (SELECT client_id, service_id FROM tmpTable);
你仍在接受2次传球,但你是一次性完成所有传球,而不是一次传球。