我每天都会在一个暂存表中获得产品提要。我想用暂存表中的记录更新实际的表。
这是我的问题。
SELECT NUll, ColumnA, ColumnB FROM stagingTable
UNION
SELECT ID, ColumnA, ColumnB From actualTable
这给了我
NULL 10 100
NULL 20 200
NULL 30 300
1 10 100
我想删除重复的记录,因为该记录已经在实际表中了。
NULL 10 100
我只需使用not exists
:
SELECT ID, ColumnA, ColumnB From actualTable
UNION ALL
SELECT NUll, s.ColumnA, s.ColumnB
FROM stagingTable s
WHERE EXISTS (SELECT 1 FROM actualTable t WHERE t.columnA = s.columnA);
我会使用与第一个答案略有不同的方法,并为暂存表使用子查询:
SELECT DISTINCT
COALESCE(T1.ID,T2.ID) AS ID
,T1.ColumnA
,T1.ColumnB
FROM
(
SELECT
NULL AS ID
,ColumnA
,ColumnB
FROM
#stagingtable
) AS T1
LEFT OUTER JOIN #actualtable T2
ON T1.ColumnA = T2.ColumnA
AND T1.ColumnB = T2.ColumnB