以下のテーブル構造では、TB_Vehicles がマスター テーブルで、TB_Cars、TB_Bikes、TB_Cars がそれぞれの車両に関する詳細情報を保持するサテライト テーブルです。
**TB_Scooters**
V_NAME V_ID V_YEAR V_TYPE V_MILEAGE
Activa 10 2003 Scooter 45
Access 20 2004 Scooter 50
**TB_Bikes**
V_NAME V_ID V_YEAR V_TYPE V_ENGINE
Karizma 30 2001 Bike 180
Pulsar 40 2008 Bike 150
**TB_Cars**
V_NAME V_ID V_YEAR V_TYPE V_CAR_TYPE
Linea 50 2011 Car Sedan
i20 60 2012 Car Sedan
**TB_Vehicles**
V_NAME V_ID V_YEAR V_TYPE V_COLOR V_AVAILABLE
Activa 10 2003 Scooter Black Yes
Access 20 2004 Scooter Black No
Karizma 30 2001 Bike Red Yes
Pulsar 40 2008 Bike Black Yes
Linea 50 2011 Car White No
i20 60 2012 Car Red Yes
ユーザーに名前を使用して検索してもらいたい。そのため、ユーザーが Name に「Access」と入力すると、クエリは、サテライト テーブル (TB_Vehicles と TB_Scooters の両方を使用) からの情報を含め、その車両に関するすべての情報を提供する必要があります。
SELECT * FROM TB_Vehicles
WHERE V_NAME = 'Access';
同様に、ユーザーが「Linea」と入力すると、TB_Vehicles および TB_Cars テーブルからの情報が提供されます。
したがって、入力として V_NAME を使用して、TB_Vehicles テーブルから V_TYPE を見つけます。それを使用して、どのサテライト テーブルに参加する必要があるかを特定し、より多くの情報を取得する必要があります。
どうすればいいですか?質問を手伝ってもらえますか?これを実現するには、CASE または DECODE を使用する必要がありますか?
編集:
ここでの要件は、その特定の車両タイプに適用可能な列のみを表示することです。したがって、ユーザーが入力として「Access」を指定すると、TB_Vehicles テーブルのすべての列と、TB_Scooters テーブルの V_MILEAGE が表示されます。
これは CASE か DECODE でできないかと考えていたのですが、まず入力された名前 (V_NAME) を使用して TB_Vehicles テーブルから車両のタイプ (V_TYPE) を特定し、この V_TYPE に基づいて関連するテーブルを検索します関連する列のみを表示します。
入力名が「アクセス」の場合、結果は次のようになります。
V_NAME V_ID V_YEAR V_TYPE V_COLOR V_AVAILABLE V_MILEAGE
Access 20 2004 Scooter Black No 50
入力名が「i20」の場合、結果は次のようになります。
V_NAME V_ID V_YEAR V_TYPE V_COLOR V_AVAILABLE V_CAR_TYPE
i20 60 2012 Car Red Yes Sedan