如何将外部联接与子查询和groupby一起使用?

问题描述

工具:MysqL Workbench 6.3
版本:MysqL 5.7

SELECT *
FROM cars as a,battery_log as b
WHERE a.user_seq = 226 AND a.seq = b.car_seq
AND b.created = ( SELECT MAX(created) FROM battery_log WHERE car_seq = a.seq )

GROUP BY car_type
ORDER BY a.created DESC;

我想将此查询转换为外部联接。

通过在“汽车”表中搜索user_seq 我需要在对应的汽车表的一对多关系中获取电池日志的最新值。

有时电池日志的值不匹配car seq,因此从表a和表b的联接过程中被截断。我该如何解决

SELECT a.*,b.battery 
FROM cars as a 
LEFT OUTER JOIN battery_log as b ON a.seq = b.car_seq
LEFT OUTER JOIN ( SELECT MAX(created) FROM battery_log WHERE a.seq = b.car_seq) as c
ON b.created = c.MAX(created)
WHERE a.user_seq = 226

GROUP BY car_type 
ORDER BY a.created DESC

我试图通过这种方式修复它,但是出现以下错误

错误代码:1054,“ where子句”中的未知列“ a.seq”

解决方法

我这样解决了这个问题。

SELECT *
FROM cars as a
LEFT OUTER JOIN battery_log as b ON a.seq = b.car_seq 
AND b.created = (SELECT MAX(created) FROM battery_log WHERE car_seq = b.car_seq)

WHERE a.user_seq = 226

GROUP BY car_type
ORDER BY a.created DESC;

LEFT OUTER JOIN ... ON后,用AND给出附加条件,并根据条件进行查询。