gpt4 book ai didi

MySQL 用 Join 列出左表中的所有记录

转载 作者:行者123 更新时间:2023-11-29 07:17:27 24 4
gpt4 key购买 nike

我有两个表,一个包含车辆数据,另一个包含燃料数据,如下所示:

tbl_vehicle

+------------+--------+
| vehicle_id | reg_no |
+------------+--------+
| 1 | ABC |
| 2 | DEF |
| 3 | GHI |
| 4 | JKA |
| 5 | LMN |
| 6 | OPQ |
+------------+--------+

tbl_direct_fuel

+---------+------------+----------+------------+
| fuel_id | vehicle_id | fuel_qty | date |
+---------+------------+----------+------------+
| 100 | 1 | 10 | 2019-10-01 |
| 101 | 1 | 12 | 2019-10-02 |
| 102 | 2 | 20 | 2019-10-03 |
| 103 | 3 | 15 | 2019-10-03 |
| 104 | 2 | 25 | 2019-10-04 |
+---------+------------+----------+------------+

我试图获取左表的所有记录以及右表的相关记录。在查询之后使用。

select("reg_no,sum(fuel_qty) as total")
->from('tbl_direct_fuel')
->join('tbl_vehicle', 'tbl_direct_fuel.vehicle=tbl_vehicle.vehicle_id', 'left')
->group_by ('reg_no')

以上代码仅显示以下输出。

+--------+----------+
| reg_no | total |
+--------+----------+
| ABC | 22 |
| DEF | 45 |
| GHI | 15 |
+--------+----------+

但我需要如下所有未加燃料的车辆。

期望的输出

+--------+----------+
| reg_no | total |
+--------+----------+
| ABC | 22 |
| DEF | 45 |
| GHI | 15 |
| JKA | 0 |
| LMN | 0 |
| OPQ | 0 |
+--------+----------+

最佳答案

您可以反转left join 中的表,以便没有加油的车辆出现在结果集中(事实上,您的left join 允许加油没有车辆,这看起来不像一个相关的用例)。

我还建议在列名称前加上它们来自的表,以避免歧义。

最后,要为没有加油的车辆返回 0(而不是 null),您可以使用 coalesce()

select("tbl_vehicle.reg_no, coalesce(sum(fuel_qty), 0) fuel_qty")
->from('tbl_vehicle')
->join('tbl_direct_fuel', 'tbl_direct_fuel.vehicle = tbl_vehicle.vehicle_id', 'left')
->group_by ('tbl_vehicle.vehicle_id')

关于MySQL 用 Join 列出左表中的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com