mysql左连接问题
我有两张桌子,一张是预订房间的桌子,另一张是“中间”桌子,用来记录预订房间的日期(因为预订可能有多个非连续日期) 它看起来像: Res_表: 身份证,房间号,房主号 Res_table_mid: id,res_id,日期 res_table_mid中的res_id列引用res_table的id。我需要知道预订的开始和结束日期 因此,查询如下所示:mysql左连接问题,sql,mysql,left-join,Sql,Mysql,Left Join,我有两张桌子,一张是预订房间的桌子,另一张是“中间”桌子,用来记录预订房间的日期(因为预订可能有多个非连续日期) 它看起来像: Res_表: 身份证,房间号,房主号 Res_table_mid: id,res_id,日期 res_table_mid中的res_id列引用res_table的id。我需要知道预订的开始和结束日期 因此,查询如下所示: SELECT * FROM res_table a LEFT JOIN (SELECT min(date) as start_date, res_id
SELECT * FROM res_table a
LEFT JOIN (SELECT min(date) as start_date, res_id FROM res_table_mid) AS min ON a.id = min.res_id
LEFT JOIN (SELECT max(date) as end_date, res_id FROM res_table_mid) AS max ON a.id = max.res_id
除非表是空的或没有结果,否则它会按预期工作,在这种情况下,它会出现错误
#1048 - Column 'res_id' cannot be null
有没有一种方法可以写出来,这样我就可以得到我需要的数据,但是如果没有结果,也就没有错误
谢谢
SELECT a.id,
a.room_id,
a.owner_id,
MAX(m.date) AS end_date ,
MIN(m.date) AS start_date
FROM res_table a
LEFT JOIN res_table_mid m
ON a.id = m.res_id
GROUP BY a.id,
a.room_id,
a.owner_id;
在原始查询中,两个派生表都没有指明Group By列。相反,您依赖MySQL猜测它应该按resu id分组。如果我不得不打赌,我会说这可能是问题的根源
res\u table
hi Robert--res\u table的数据库结构都是int值。谢谢托马斯!这非常有效,我很欣赏其中的细节。
SELECT min(date) AS start_date FROM (
SELECT * FROM res_table a
LEFT JOIN res_table_mid AS b
ON a.id = b.res_id
WHERE a.id = @reservation)
SELECT max(date) AS end_date FROM (
SELECT * FROM res_table a
LEFT JOIN res_table_mid AS b
ON a.id = b.res_id
WHERE a.id = @reservation)
SELECT min(date) AS start_date FROM (
SELECT * FROM res_table a
LEFT JOIN res_table_mid AS b
ON a.id = b.res_id
WHERE a.id = @reservation)
SELECT max(date) AS end_date FROM (
SELECT * FROM res_table a
LEFT JOIN res_table_mid AS b
ON a.id = b.res_id
WHERE a.id = @reservation)