使用DISTINCT和UNION函数后,如何获取SQL中的所有列?

问题描述

我正在尝试编写一个将历史约会数据与实时更新约会数据结合在一起的查询

实时更新数据和历史数据具有所有常见的列标题和数据类型。

“历史数据集”是100k-150k行数据的静态快照,我正尝试与实时更新数据结合以创建完整数据集

由于实时更新数据和历史数据之间存在一些重叠,因此我想过滤出唯一约会ID。


这是我编写的查询


SELECT
disTINCT(n.appointment_id)
FROM (
  SELECT 
  * FROM note_data
  UNION
  SELECT * FROM note_data_historical) as n

FULL OUTER JOIN note_data_historical as historical
    on historical.appointment_id = n.appointment_id
  
FULL OUTER JOIN note_data as live
    on live.appointment_id = n.appointment_id


我想做的是避免写出几十个列标题,但又没有重复的行。


总而言之,我想:

  1. 结合两个具有重叠行的数据集以获得完整的数据集
  2. 过滤掉重叠的行
  3. 让所有列都显示(例如SELECT *由一列分组或联接)

解决方法

听起来您想要以下内容

SELECT * 
FROM note_data
UNION ALL
SELECT * 
FROM note_data_historical
WHERE note_data_historical.appointment_id NOT IN
(
 SELECT appointment_id FROM note_data
)

这将获取所有note_data和note_data_historical行,除非note_data中存在note_data_historical.appointment_id。而且您无需列出查询中的列。

请注意,我使用的是UNION ALL而不是UNION,但是由于我不知道您的数据,因此我不知道这是否合理。