在下面的表结构中,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
我希望用户使用名称进行搜索。因此,当用户输入名称作为“访问”时,我的查询应该提供有关该车辆的所有信息,包括卫星表中的信息(使用 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 来实现这一点?
编辑:
此处的要求是仅显示适用于该特定车辆类型的那些列。因此,当用户提供“访问”作为输入时,它应该显示 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