使用 Postgres SQL 在不复制的情况下合并两个不同的表

Combine two different tables Without Duplicating using Postgres SQL

我正在处理一个查询,我应该合并 2 tables 并将每个用户作为一个单独的条目(用户不应重复)。对于日期,我需要从这 2 tables

中获取最新的

table 1

table 2

预期输出(我需要合并两个 tables 并将用户的数据作为单个条目获取,对于日期,我需要获取这 2 tables)

中的最新日期
user_id      name        date     
----------------------------------
     1       John     2020-10-29 --The latest date-- 
     2       Tom      2020-11-15 --The latest date--   
     3       Peter    2020-12-10 --The latest date-- 

实际输出

我的postgresql

SELECT user_id, name, date
FROM
  table_1
UNION
SELECT user_id, name, date
FROM
table_2

我尝试了很多方法,但没有任何效果。进行合并时数据重复。谁能帮帮我

使用 UNION ALL 组合两个表,然后应用 ROW_NUMBER() 序列化 user_id 具有降序日期的明智值。然后使用 CTE 检索最后一条记录。使用 UNION ALL 避免额外排序。

-- PostgreSQL
WITH c_cte AS (
    SELECT t.*
         , ROW_NUMBER() OVER (PARTITION BY t.user_id ORDER BY t.date DESC) row_num
    FROM (SELECT user_id, name, date
          FROM table_1

          UNION ALL

          SELECT user_id, name, date
          FROM table_2) t
)
SELECT user_id, name, date
FROM c_cte
WHERE row_num = 1
ORDER BY user_id

还有另一种不用 CTE 做同样事情的方法

SELECT u.user_id, u.name, u.date
FROM (SELECT t.*
           , ROW_NUMBER() OVER (PARTITION BY t.user_id ORDER BY t.date DESC) row_num
      FROM (SELECT user_id, name, date
            FROM table_1

            UNION ALL

            SELECT user_id, name, date
            FROM table_2) t
           ) u
WHERE u.row_num = 1
ORDER BY u.user_id