sql - 如何在两个表之间进行完全连接
问题描述
我有两张桌子:
表“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
请指教。
科比
解决方案
我实际上会在这里使用交叉连接,然后使用另一个左连接来引入点击计数数据:
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
在交叉加入之前删除重复项。
推荐阅读
- java - 在不更改应用程序服务器属性的情况下更改 TLS
- android - 将调试签名的应用上传到 Playstore 以进行应用内计费测试
- android - 如何使用 Espresso 测试片段是否可见
- javascript - 使用 jest 在另一个函数中测试一个函数
- c# - 创建一个字典,键为列表(字符串)
- c - Cygwin 中的 can.h 和 can/raw.h 头文件在哪里?
- python - 从解密的文本中获取正确的输出
- javascript - 如何停止无限缩放
- angular - 启动我的项目时出错(运行 ng serve 后)
- python-3.x - 如何反转列表中定义的元组?