【问题标题】:Creating a full join in SQL without duplicates [duplicate]在没有重复的 SQL 中创建完全连接 [重复]
【发布时间】:2022-01-02 04:05:06
【问题描述】:

我有两个表,它们都有一个日期字段。我想要的最终结果是一个日期表(可以重复),该行中有记录 A 和 B。

id_a     date_a
1        Jan 1
2        Feb 2
3        Feb 2
4        Mar 3
id_b     date_b
a        Jan 1
b        Feb 2
c        Mar 3
d        Mar 3
date     id_a    id_b
Jan 1      1       a
Feb 2      2       b
Feb 2      3       null
Mar 3      4       c
Mar 3      null    d

我目前有这个解决方案,但不是空字段,而是重复 id_a : 4 和 id_b : b。

SELECT 
COALESCE(Table1.date_a, Table2.date_b) AS date

Table1.id_a, 
Table2.id_b

FROM Table1
FULL OUTER JOIN Table2
  ON Table1.date_a = Table2.date_b;

【问题讨论】:

    标签: sql join full-outer-join


    【解决方案1】:

    DBFIDDLE

    我在日期的row_number 上添加了一个匹配项:

    SELECT  
       COALESCE(a.date_a, b.date_b) AS date,
       a.id_a,
       b.id_b
    FROM 
       (SELECT
           id_a,
           date_a,
           ROW_NUMBER() OVER(PARTITION BY date_a ORDER BY id_a) R
       FROM table1) a
    FULL OUTER JOIN
       (SELECT
           id_b,
           date_b,
           ROW_NUMBER() OVER(PARTITION BY date_b ORDER BY id_b) R
       FROM table2) b ON a.date_a = b.date_b and a.R = b.R
    

    输出:

    date id_a id_b
    2021-01-01 1 a
    2021-02-02 2 b
    2021-02-02 3
    2021-03-03 4 c
    2021-03-03 d

    【讨论】:

    • 正是我需要的,非常感谢!
    猜你喜欢
    • 2018-07-12
    • 2013-07-29
    • 2013-09-09
    • 2017-06-10
    • 2011-12-26
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多