仅插入一次条目

时间:2012-03-29 14:46:04

标签: sql

我有一个关系表,表格看起来像这样

 ------------------------
| 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 ....

有没有更有效的方法我只能删除以后不会插入的那些,只添加新的?

2 个答案:

答案 0 :(得分:1)

是的,你可以做到这一点,但在我看来,这不是真正的sql依赖主题。实际上这取决于您的语言/平台选择。如果您使用强大的平台,例如.NETJava,那么有许多数据库类,例如adaptersdatasets等等,它们可以为您解决问题,例如查找改变的部分,只更新/插入/删除必要的部分等。

我更喜欢使用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次传球,但你是一次性完成所有传球,而不是一次传球。