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 中设置分钟间隔,而无需使用命令行。