2013-07-10 3 views
1

У меня есть эти таблицы в моей базе данных:делают SQL запрос с внутренним соединением

Tourist - это первая таблица

  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 = 86 и Tourist_ID = 87
Туристический объект с номером 86 имеет надбавку Extra_Charge_ID = 7 и Extra_charge_ID = 11;

Проблема заключается в том, что турист относится к экскурсии с Excursion_ID = 6; Таким образом, эта экскурсия также имеет дополнительные сборы с Extra_Charge_ID = 8 и Extra_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"; 
+0

Возможно, если вы можете связать таблицу Туриста с таблицей экскурсий и стол для экскурсий в таблицу 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 резервирования по экскурсионно

4) найти свое решение :

Решение

  1. Сначала найдите результаты запроса второй подсказки.
  2. Если у него есть результаты, результаты результата; еще продолжайте.
  3. Найдите результаты первого и старого запроса и верните их.
Смежные вопросы