Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql左连接问题_Sql_Mysql_Left Join - Fatal编程技术网

mysql左连接问题

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

我有两张桌子,一张是预订房间的桌子,另一张是“中间”桌子,用来记录预订房间的日期(因为预订可能有多个非连续日期)

它看起来像:

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 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)