LEFT OUTER JOINを使用すると、次のように3つのクエリを実行できます。-
SELECT vehicles.ID
FROM vehicles
INNER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
LEFT OUTER JOIN insurance i2
ON i1.vehicle_ID = i2.vehicle_ID
AND i2.expire > i1.expire
WHERE i2.id IS NULL
AND i1.expire < NOW()
ここでは、それ以降の保険の有効期限に対して左外部結合を実行し、i2.idがNULLであることをチェックして、それ以降の有効期限が見つからないことを確認してから、見つかった有効期限をチェックして、有効期限が切れていることを確認します。
SELECT vehicles.ID
FROM vehicles
LEFT OUTER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
WHERE i1.id IS NULL
これは、一致する保険レコードがないことを確認するだけです
SELECT vehicles.ID
FROM vehicles
INNER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
LEFT OUTER JOIN insurance i2
ON i1.vehicle_ID = i2.vehicle_ID
AND i2.expire > i1.expire
WHERE i2.id IS NULL
AND i1.expire >= NOW()
最初のクエリと非常によく似ており、それ以降の保険の有効期限に対して左外部結合を実行し、i2.idがNULLであることをチェックして、それ以降の有効期限が見つからないことを確認します。次に、見つかった有効期限をチェックして、有効期限が切れていないことを確認します。 。