簡體   English   中英

MySQL 使用 Join 列出左表中的所有記錄

[英]MySQL list all records in left table with Join

我有兩張表,一張包括車輛數據,另一張包括燃料數據,如下所示:

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

上面的代碼只顯示了下面的output。

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

但是我需要所有帶有非燃料車輛的車輛,如下所示。

所需 output

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

嘗試:

select t1.reg_no, t2.fuel_total
from tbl_vehicle t1
left join (
    select vehicle_id, sum(fuel_qty) fuel_total
    from tbl_direct_fuel
    group by vehicle_id
) t2 on t1.vehicle_id = t2.vehicle_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM