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

标签 mysql codeigniter

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

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/

相关文章:

php - 加入两个 mysql 表以获得真/假列

php - Codeigniter 内部的迁移

php - 使用 codeigniter 向数据库中插入一条记录

python - Alembic 检测表已经存在,所以它试图再次创建它们

mysql - 由于空错误 [HY000] [MySQL][ODBC 3.51,插入失败

php - 使用 php 将数字添加到获取的数组中

php - 如何在 CodeIgniter 中销毁并重新加载模型?

php - mysql - codeigniter 中的重复条目错误

php - 单击链接时更改页面语言

java - 错误: incompatible types: int cannot be converted to Client - Java