提前感谢您帮助我解决这个问题,我是 SQL Server 新手,需要您的专家帮助,我想返回左表中的所有值,即使右表中没有记录以及 MAX(MOT Expiry) 或 MAX(Road)税)到期。
我尝试了此查询,但无法获得所需的结果
SELECT Vehicle.id,vehicle.registrationMark, vehicle.status, RoadTax.Expiry, MOT.Expiry
FROM Vehicle
LEFT JOIN RoadTax ON Vehicle.id = RoadTax.VehicleID
LEFT JOIN MOT ON Vehicle.id = MOT.VehicleID;
为了清楚地说明这一点,请看这个例子。我想从车辆表中返回所有车辆及其最大 TAX 和 MOT 到期时间。甚至道路税或 MOT 表中也没有车辆记录。
车辆表
---------------------------------
| ID | RegistrationMark | Status |
---------------------------------
| 1 | ABC | Active |
| 2 | DEF | Active |
| 3 | GHI | Active |
---------------------------------
道路税表
------------------------------
| ID | VehicleID | Expiry |
------------------------------
| 1 | 1 | 10/10/2013 |
| 2 | 1 | 10/10/2014 |
| 3 | 2 | 20/12/2014 |
------------------------------
MOT表
-------------------------------
| ID | VehicleID | Expiry |
-------------------------------
| 1 | 2 | 25/01/2015 |
-------------------------------
我想要的结果
-----------------------------------------------------------
| ID | RegistrationMark | Status | TaxExpiry | MOTExpiry |
-----------------------------------------------------------
| 1 | ABC | Active | 10/10/2014 | NULL |
| 2 | DEF | Active | 20/12/2014 | 25/01/2015 |
| 3 | GHI | Active | NULL | NULL |
-----------------------------------------------------------
非常感谢您的帮助。
最佳答案
看来您的查询走在正确的轨道上 - 您只需要添加聚合即可:
SELECT Vehicle.id,vehicle.registrationMark, vehicle.status
, Max(RoadTax.Expiry) as LatestTax_Exp
, Max(MOT.Expiry) as LatestMOT_Exp
FROM Vehicle
LEFT JOIN RoadTax ON Vehicle.id = RoadTax.VehicleID
LEFT JOIN MOT ON Vehicle.id = MOT.VehicleID;
group by vehicle.ID, vehicle.Registrationmark, vehicle.status
或者,如果我误解了您想要的内容并且车辆可以有多个状态或注册,请尝试:
SELECT Vehicle.id,vehicle.registrationMark, vehicle.status
, Max(RoadTax.Expiry) over (partition by Vehicle.ID) as LatestRT_Exp
, Max(MOT.Expiry) over (partition by Vehicle.ID) as LatestMOT_Exp
FROM Vehicle
LEFT JOIN RoadTax ON Vehicle.id = RoadTax.VehicleID
LEFT JOIN MOT ON Vehicle.id = MOT.VehicleID;
关于mysql - 返回左表中的所有行,即使右表中没有记录以及右表中的最大到期日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29710890/