如何在UNION中获得唯一记录,其中一列对于UNION的一部分为null



我每天都会在一个暂存表中获得产品提要。我想用暂存表中的记录更新实际的表。

这是我的问题。

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

相关内容

最新更新