我试图显示一个月中的所有日期,并且在预订详细信息中,我只有check_in_date和check_out_date,所以我必须在左联接中创建左联接,这是我的脚本
SELECT
*
FROM
(
SELECT
@dt:= DATE_ADD( @dt, interval 1 day ) myDate
FROM
(
SELECT
@dt := '2020-01-31'
) vars, tb_dummy
LIMIT 29
) JustDates
LEFT JOIN
(
SELECT
DATE_FORMAT(d.myDate2,'%Y-%m-%d') AS `myDate2`,
COALESCE(count(rdt.reservation_detail_id), 0) AS `RNS`,
FORMAT(SUM(rdt.subtotal_amount/COALESCE(DATEDIFF(DATE(DATE(rdt.check_out_date)), DATE(rdt.check_in_date)), 0)), 2) AS `REVENUE`,
FORMAT(SUM(rdt.subtotal_amount/COALESCE(DATEDIFF(DATE(DATE(rdt.check_out_date)), DATE(rdt.check_in_date)), 0))/COALESCE(count(rdt.reservation_detail_id), 0), 2) AS `AVGREV`
FROM
(
SELECT
@dt:= DATE_ADD( @dt, interval 1 day ) myDate2
FROM
(
SELECT
@dt := '2020-01-31'
) vars2, tb_dummy
LIMIT 29
) d
LEFT JOIN
tb_reservation_detail rdt
ON d.myDate2 BETWEEN DATE(rdt.check_in_date) AND DATE(DATE(rdt.check_out_date) - INTERVAL 1 DAY)
INNER JOIN
tb_reservation R
ON rdt.reservation_id = R.reservation_id
WHERE
rdt.reservation_status_id <> 3
AND
R.property_id = 57
GROUP BY d.myDate2
ORDER BY d.myDate2 ASC
) Resv
ON
JustDates.myDate = Resv.myDate2
ORDER BY
JustDates.myDate ASC
当我运行它时,它仅返回左侧表格中的日期,例如:Left join result
但是当我改变
SELECT
*
FROM
(
SELECT
@dt:= DATE_ADD( @dt, interval 1 day ) myDate
FROM
(
SELECT
@dt := '2020-01-31'
) vars, tb_dummy
LIMIT 29
) JustDates
**LEFT JOIN**
(
到
SELECT
*
FROM
(
SELECT
@dt:= DATE_ADD( @dt, interval 1 day ) myDate
FROM
(
SELECT
@dt := '2020-01-31'
) vars, tb_dummy
LIMIT 29
) JustDates
**RIGHT JOIN**
(
它从右表中返回数据,如下所示:Right join result
我的代码有什么问题?
答案 0 :(得分:0)
欢迎使用StackOverflow。我认为您的问题是您不太了解RIGHT JOIN
和LEFT JOIN
之间的区别。查看this StackOverflow post可以解决的差异。
就想显示一个月中的所有日期而言,这是我发布的link to an answer,我相信它可以满足您的要求。在我的回答中,我提供了一个示例查询,其中包含一个派生表,您可以从中选择一个表,然后LEFT JOIN
到其中进行选择,这样它将显示当月的所有天数,无论表中是否有给定日期或不。
希望这会有所帮助。