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. .....

ツーリスト_予約

  1. ツーリスト_予約_ID
  2. Reservation_ID - 外部キー
  3. Tourist_ID - 外部キー

これが私の例です: 私は で予約していますReservaton_ID = 27
この予約にはTourist_ID = 86とのツーリストが 2 人いますTourist_ID = 87
この id 86 のツーリストには と の追加料金がExtra_Charge_ID = 7あり Extra_charge_ID = 11ます ;

ここでの問題は、ツーリストが Excursion に属していることExcursion_ID = 6です。したがって、このエクスカーションには と の追加料金もExtra_Charge_ID = 8ありExtra_Charge_ID = 9ます。(ID7、11の方は除く)

Extra_Charge_IDこれらに属していないが、それらに属しているTourists_IDこれを取得するための SQL クエリを作成することは可能ですか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

このクエリで、質問の2番目の手がかりを見つけることができます-Excursionによる予約のExtra_Chargesのリスト-

4) 解決策を見つける:

解決

  1. 最初に、2 番目の手がかりのクエリの結果を見つけます。
  2. 結果がある場合は結果を返します。それ以外の場合は続行します。
  3. 最初のクエリと古いクエリの結果を見つけて返します。
于 2015-03-15T12:43:56.357 に答える