问题描述
工具: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
我试图通过这种方式修复它,但是出现以下错误:
解决方法
我这样解决了这个问题。
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给出附加条件,并根据条件进行查询。