1

我的数据库中有这些表:

游客- 这是第一张桌子

  1. Tourist_ID - 主键
  2. 名字……等等……

额外收费

  1. Extra_Charge_ID - 主键
  2. Excursion_ID - 外键
  3. Extra_Charge_Description

Tourist_Extra_Charges

  1. Tourist_Extra_charge_ID
  2. Extra_Charge_ID - 外键
  3. Tourist_ID - 外键

预订

  1. Reservation_ID - 主键
  2. ......

Tourist_Reservations

  1. Tourist_Reservation_ID
  2. Reservation_ID - 外键
  3. Tourist_ID - 外键

所以这里是我的例子:我已经预订了Reservaton_ID = 27
这个预订有两个游客Tourist_ID = 86Tourist_ID = 87
这个游客 id 86 有额外费用Extra_Charge_ID = 7; Extra_charge_ID = 11

问题在于游客属于游览Excursion_ID = 6;因此,这次游览还需要额外收费Extra_Charge_ID = 8Extra_Charge_ID = 9; (ID 7 和 11 除外)

是否可以进行 SQL 查询以获取Extra_Charge_ID不属于这些Tourists_ID但属于它们的这个Excursion_ID(我的意思是获取 Extra_charge_Id:8 和 9)

(这是我为获取所有游客的 extra_charge_description 所做的查询,Reservation_ID = 27但我不知道如何更改它。)

 string selectTouristExtraCharges =
        "Select EXTRA_CHARGES.Extra_Charge_Description,TOURIST_EXTRA_CHARGES.Tourist_ID FROM EXTRA_CHARGES";
         selectTouristExtraCharges+=" INNER JOIN TOURIST_EXTRA_CHARGES on EXTRA_CHARGES.Extra_Charge_ID = TOURIST_EXTRA_CHARGES.Extra_Charge_ID";
         selectTouristExtraCharges+=" INNER JOIN TOURIST_RESERVATION on TOURIST_EXTRA_CHARGES.Tourist_ID = TOURIST_RESERVATION.Tourist_ID";
         selectTouristExtraCharges+=" INNER JOIN  RESERVATIONS on RESERVATIONS.Reservation_ID = TOURIST_RESERVATION.Reservation_ID";
         selectTouristExtraCharges += " where RESERVATIONS.Reservation_ID=27";
4

1 回答 1

0

作为开发人员,您需要执行以下操作:

1)开始绘制数据结构图;像这样: 在此处输入图像描述tourist_excursion在其中添加表格。

2)重写你当前的查询并理解它-[+优化]-:

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)找到你的解决方案:

解决方案

  1. 首先找到第二条线索的查询结果。
  2. 如果有任何结果返回结果;否则继续。
  3. 查找第一个和旧查询的结果并返回它们。
于 2015-03-15T12:43:56.357 回答