sql从select中插入到表中而没有重复项(需要更多然后是DISTINCT)

tdj*_*jdj 16 sql insert duplicates

我正在选择多行并将它们插入另一个表中.我想确保在我插入多行的表中不存在它. 当select中有重复的行时,DISTINCT会起作用,但是当它与插入的表中已有的数据进行比较时则不行.

如果我一次选择一行,我可以做一个IF EXIST,但由于它的多行(有时10+),我似乎不能这样做.

a_h*_*ame 29

INSERT INTO target_table (col1, col2, col3)
SELECT DISTINCT st.col1, st.col2, st.col3
FROM source_table st
WHERE NOT EXISTS (SELECT 1 
                  FROM target_table t2
                  WHERE t2.col1 = st.col1 
                    AND t2.col2 = st.col2
                    AND t2.col3 = st.col3)
Run Code Online (Sandbox Code Playgroud)

如果distinct应仅在某些列上(例如col1,col2),但是您需要插入所有列,则可能需要一些派生表(ANSI SQL):

INSERT INTO target_table (col1, col2, col3)
SELECT st.col1, st.col2, st.col3
FROM ( 
     SELECT col1, 
            col2, 
            col3, 
            row_number() over (partition by col1, col2 order by col1, col2) as rn
     FROM source_table 
) st
WHERE st.rn = 1
AND NOT EXISTS (SELECT 1 
                FROM target_table t2
                WHERE t2.col1 = st.col1 
                  AND t2.col2 = st.col2)
Run Code Online (Sandbox Code Playgroud)


tdj*_*jdj -4

有几篇 MSDN 文章与此相关,但到目前为止,这篇文章是最好的:

http://msdn.microsoft.com/en-us/library/ms162773.aspx

他们使实施变得非常容易,我的问题现在已经解决了。GUI 也很难看,但实际上您可以在 Windows 2003 中设置分钟间隔,而无需使用命令行。

  • 这并不能回答原来的问题,也不能帮助未来的用户寻找类似问题的解决方案。 (4认同)