首页 > 解决方案 > 如何在两个表之间进行完全连接

问题描述

我有两张桌子:

表“DATES”包含天数:

select * from dates;
click_date
------------
2019-08-14
2019-08-04
2019-07-24

表“点击”包含日期、点击器、点击:

select date,clicker,click_count 
from Clicks;
   date    | clicker | click_count
-----------------------------------
2019-08-04 | 3422    |           2
2019-07-24 | 3539    |           7

我需要获取所有日期的所有 clicker 和 click_count:

    date    | clicker | click_count
------------------------------------
 2019-08-04 | 3422    |           2
 2019-08-14 | 3422    |           0
 2019-07-24 | 3422    |           0
 2019-08-04 | 3539    |           0
 2019-08-14 | 3539    |           0
 2019-07-24 | 3539    |           7

请指教。

科比

标签: sql

解决方案


我实际上会在这里使用交叉连接,然后使用另一个左连接来引入点击计数数据:

SELECT
    d.click_date,
    c1.clicker,
    COALESCE(c2.click_count, 0) AS click_count
FROM dates d
CROSS JOIN Clicks c1
LEFT JOIN Clicks c2
    ON d.click_date = c2.date AND c1.clicker = c2.clicker
ORDER BY
    c1.clicker,
    d.click_date;

在此处输入图像描述

演示

注意:如果Clicks表格中的给定答题器出现多次,请使用:

CROSS JOIN (SELECT DISTINCT clicker FROM Clicks) c1

在交叉加入之前删除重复项。


推荐阅读