我的数据库中有这些表:
游客 - 这是第一张表
EXTRA_CHARGES
Tourist_Extra_Charges
预订
Tourist_Reservations
所以这是我的例子:我有Reservaton_ID = 27
的预订
这项预订有两位游客Tourist_ID = 86
和Tourist_ID = 87
这位身份为86的游客在Extra_Charge_ID = 7
和Extra_charge_ID = 11
;
问题在于游客属于Excursion Excursion_ID = 6
;
因此,此次短途旅行还会收取Extra_Charge_ID = 8
和Extra_Charge_ID = 9
的额外费用; (除了身份证号为7和11的人)
是否可以进行SQL查询以获取不属于这些Extra_Charge_ID
但属于他们Tourists_ID
的{{1}}(我的意思是获取Extra_charge_Id:8和9)
(以下是我使用Excursion_ID
获取所有游客的extra_charge_description的查询,但我不知道如何更改。)
Reservation_ID = 27
答案 0 :(得分:0)
作为开发人员,您需要执行以下操作:
1)开始绘制数据结构图;像这样:
我在其中添加了tourist_excursion
表。
2)重写当前查询并理解它 - [+ optimization] - :
Select ec.Extra_Charge_Description, tec.Tourist_ID
From EXTRA_CHARGES As ec INNER JOIN
TOURIST_EXTRA_CHARGES as tec on ec.Extra_Charge_ID = tec.Extra_Charge_ID INNER JOIN
TOURIST_RESERVATION as tr on tec.Tourist_ID = tr.Tourist_ID
where tr.Reservation_ID=27
在此查询中,inner join
已删除,并且理解会变得更好。
3)尝试寻找其他线索:
Select ec.Extra_Charge_Description, tec.Tourist_ID
From EXTRA_CHARGES As ec INNER JOIN
TOURIST_EXCURSION as te on ec.Excursion_ID = te.Exursion_ID INNER JOIN
TOURIST_RESERVATION as tr on te.Tourist_ID = tr.Tourist_ID
where tr.Reservation_ID=27
在此查询中,您可以找到问题的第二个线索 - Excursion预订Extra_Charges的列表 -
4)找到你的解决方案:
解决方案