これを行う方法はたくさんあります。そのテーブル構造を維持した場合、クエリを 1 つに抑えることができます。
SELECT `price`, 'car' as `mytype`
FROM Couriers
JOIN Cars ON (Couriers.Id = Cars.IdCourier)
WHERE Cars.IdCourier = ?
UNION
SELECT `price`, 'plane' as `mytype`
FROM Couriers
JOIN Planes ON (Couriers.Id = Planes.IdCourier)
WHERE Planes.IdCourier = ?
UNION
SELECT `price`, 'boat' as `mytype`
FROM Couriers
JOIN Boats ON (Couriers.Id = Boats.IdCourier)
WHERE Boats.IdCourier = ?;
しかし、これはかなり高価です。代わりに、フィールドIdCourier、IdType、およびTypeを持つ CouriersTypes のような名前の 5 番目のテーブルを個人的に作成します。高速検索のため にIdCourierにインデックスを付けます。この例では、Courier が任意またはすべてのタイプ (車、飛行機、ボート) に適合できると想定しています。 クエリは次のようになります。
SELECT `price`, `Type`
FROM Couriers
JOIN CouriersTypes ON (Couriers.Id = CouriersTypes.IdCourier)
WHERE IdCourier = ?;
大量のデータの場合、結果ははるかに高速になります。 クーリエが 1 つのタイプしか実行できない場合は、その例を忘れて、idType と Type を Couriers テーブルに追加し、それを直接クエリします。
SELECT `price`, `Type`
FROM Couriers
WHERE Id = ?;
お役に立てれば。