如何解决如何将外部联接与子查询和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给出附加条件,并根据条件进行查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。