插入避免重复,但不使用主键

时间:2013-06-18 14:42:22

标签: sql insert duplicates

我有一个包含2个字段的表,这些字段不是主键,它们不能像我有重复项一样。 我想从连接表中插入数据,但避免更多重复。我做的是:

insert into X(A,B)
select *
from (Y.A, Z.B
    from Y join Z
    on (Y.id = Z.id)) tmp
    WHERE NOT EXISTS (SELECT * FROM X
        WHERE A = tmp.A
        AND B = tmp.B)

据我所知,最好不要使用INSERT ... WHERE NOT EXISTS,您认为这类代码可能存在问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用MERGE查询

MERGE X AS TARGET 使用(选择Y.A AS A,Z.B AS B Y inner JOIN Z ON Y.Id = Z.Id)AS SOURCE ON TARGET.A = SOURCE.A和TARGET.B = SOURCE.B 当没有匹配时 INSERT VALUES(SOURCE.A,SOURCE.B)

http://www.codeproject.com/Tips/590085/Merge-in-SQL-Server-2008 http://blog.sqlauthority.com/2010/06/08/sql-server-merge-operations-insert-update-delete-in-single-execution/