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

MCIT趋势

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

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')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL从左表返回所有记录,但右表中有匹配项的记录除外

如何查找两个表中都存在的记录以及左表中的所有记录?

如何在下拉列表中列出数据库的所有表(非记录)MySQL PHP

即使表 B 上没有记录,也使用左连接获取所有记录

左外部联接未获取左表的所有记录

Mysql每月从php列出表中的记录?

使用SQLite列出数据库中的所有表

如何左联接表不保留左表中的所有记录?

在phpMyAdmin中删除MYSQL表中的所有记录

MySQL连接表,其中所有左记录都在右

如何使用php自动删除mysql表中的所有记录?

ASP.NET Web API列出SQL Server表中的所有记录

Mysql join 不显示所有记录

LEFT OUTER JOIN如何返回比左表中多的记录?

如何使用RedBeanPHP显示表中的所有记录?

LEFT JOIN-从左表中获取所有数据,而右表中没有匹配项

如何编写一个SQL查询左联接2个表,该表列出左表中的所有条目,但仅列出一次?

列出带有序列号的mysql中的所有表

MySQL Join - 仅当所有右表行都满足 WHERE 子句时才检索左表行

Erlang:列出所有记录

使用MySQL记录所有表上的所有事件

左外连接,从左边查找所有在右表中没有出现的,mysql

Oracle,LEFT OUTER JOIN不返回左表中的所有行,而是表现为INNER JOIN

使用mysql中的最近记录获取组的所有ID

列出带有第三个表计数的所有记录,但第二个表是数据透视表 - MySQL Laravel

从表中获取所有记录-EclipseLink

计算表中的所有记录

删除表中以 < 开头的所有记录

使用seeds.rb从数据库的所有表中删除所有记录