2013-07-10 62 views
1

我有我的數據庫中的這些表:湊合着內部SQL查詢加入

旅遊 - 這是第一臺

  1. Tourist_ID - 主鍵
  2. 名稱...等...

EXTRA_CHARGES

  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
此號碼爲86的遊客有額外費用Extra_Charge_ID = 7Extra_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而提出的查詢,但是我不知道如何改變它。)

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"; 
+0

如果您可以將Tourist錶鏈接到Excursion表並將Excursion錶鏈接到ExtraCharges表,則可能會出現這種情況。 – Gimmy

+0

以及如何看起來像查詢 –

回答

0

,因爲你需要做這些開發者:

1)開始繪製數據結構的示意圖。像這樣: enter image description here 那我在表中添加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 

,在這個查詢,你可以找到你的問題保留Extra_Charges的 - 列出的第二個線索由Excursion-

4)找出解決方案:

解決方案

  1. 首先查找第二條線索的查詢結果。
  2. 如果它有任何結果返回結果;否則繼續。
  3. 查找第一個和舊查詢的結果並返回它們。