使用Inner Join进行sql查询

时间:2013-07-10 10:43:32

标签: sql

我的数据库中有这些表:

游客 - 这是第一张表

  1. Tourist_ID - 主键
  2. 名称...等...
  3. EXTRA_CHARGES

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

      1. Tourist_Extra_charge_ID
      2. Extra_Charge_ID - 外键
      3. Tourist_ID - 外键
      4. 预订

        1. Reservation_ID - 主键
        2. .....
        3. Tourist_Reservations

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

          4. 所以这是我的例子:我有Reservaton_ID = 27的预订 这项预订有两位游客Tourist_ID = 86Tourist_ID = 87 这位身份为86的游客在Extra_Charge_ID = 7Extra_charge_ID = 11;

            时收取额外费用

            问题在于游客属于Excursion Excursion_ID = 6; 因此,此次短途旅行还会收取Extra_Charge_ID = 8Extra_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

1 个答案:

答案 0 :(得分:0)

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

1)开始绘制数据结构图;像这样: enter image description here 我在其中添加了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)找到你的解决方案:

解决方案

  1. 首先找到第二条线索的查询结果。
  2. 如果有任何结果返回结果;否则继续。
  3. 查找第一个和旧查询的结果并返回它们。