【发布时间】:2017-09-05 07:49:00
【问题描述】:
我正在使用 MariaDB-10.2.6。
目前架构如下:
CREATE TABLE `daily_report` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date` date DEFAULT NULL,
`user_id` varchar(255) NOT NULL,
CONSTRAINT `daily_report_user_id_fk` FOREIGN KEY (`user_id`) REFERENCES `user`
(`id`) ON DELETE SET NULL ON UPDATE CASCADE
)
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`shall_create_every_day` tinyint(1) NOT NULL
)
CREATE TABLE `calendar` (
`datefield` date
)
规则:
-
shall_create_every_day设置为1的用户应每天创建一个daily_report。 - 我有一个日历表
calendar,它包含从2000-01-01到2020-12-31的每个日期(因为 generate_series 在 MySQL/MariaDB 中不可用)
我尝试了以下查询:
select daily_report.id, daily_report.date, user.id, calendar.datefield
from calendar
left join daily_report on daily_report.date=calendar.datefield
right join user on daily_report.user_id=user.id and user.shall_create_every_day=1
where calendar.datefield='2017-08-02'
我尝试了一个日期范围,但出于测试目的,我将where 语句限制为仅一天。
它应该返回所有用户,shall_create_every_day,在'2017-08-12'没有创建任何daily_report。但我只得到那天创建的报告的组合。
我对左/右连接返回不匹配行的空值有什么误解吗?
【问题讨论】: