Вопрос SQL-запроса - PullRequest
       5

Вопрос SQL-запроса

2 голосов
/ 01 апреля 2011

Я работаю с авиакомпаниями, аэропортами и их маршрутами.
У меня есть две таблицы маршрутов и дополнения. Таблица дополнения была построена путем поиска сегментов маршрута, которые разделяют узел. (B является узлом на маршруте A-> B-> C)

Я хочу построить таблицу дополнений, чтобы назначение, достигнутое через узел, было уникальным. Другими словами, авиакомпания не должна быть в состоянии самостоятельно достичь пункта назначения C.

После построения таблицы дополнений я попытался:

SELECT t1.*
FROM complement AS t1
   , routes AS t2
WHERE t1.airline_id1 = t2.airline_id
  AND t1.source = t2.source
  AND t1.destination != t2.destination

* авиакомпания_ид1 относится к первой авиакомпании, которая обслуживает маршрут А до Б. (по маршруту А-> В-> С)
В исходной таблице было около 650 000 записей, но по этому запросу я получаю более 10 миллионов записей. Я уверен, что я делаю что-то не так с этим.

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: некоторые поля в таблице дополнения являются авиакомпания_ид1, авиакомпания_ид2, источник_порт, узел, пункт назначения_порт

1 Ответ

2 голосов
/ 01 апреля 2011

Имеет ли таблица complement поле airline_id2 (для части поездки B->C)?

Это даст все «дополнительные» маршруты, где две части выполняются разными авиакомпаниями:

SELECT c.*
FROM complement AS c
WHERE c.airline_id1 != c.airline_id2

Или, может быть, вы хотите:

(все «дополняют» маршруты от A до C для авиакомпаний, у которых нет «прямого» маршрута от A до C).

SELECT c.*
FROM complement AS c
  LEFT JOIN routes AS r
    ON c.source_airport = r.source_airport
      AND c.destination_airport = r.destination_airport
      AND c.airline_id1 = r.airline_id
WHERE r.id IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...