Вопрос MySQL - PullRequest
       8

Вопрос MySQL

1 голос
/ 01 марта 2011

У меня есть база данных, содержащая данные о маршрутах для авиакомпаний. Некоторые из атрибутов - sources_airport_ID, destination_airport_ID и авиакомпания (которая поддерживает маршрут от источника до места назначения). Я пытаюсь самостоятельно присоединиться к таблице, чтобы найти авиакомпании, имеющие один и тот же маршрут (иными словами, одни и те же sources_airport_ID и destination_airport_ID).

Я использовал запрос следующим образом: (имя таблицы = маршруты)

SELECT t1.*, t2.*
  FROM routes AS t1, routes AS t2
 WHERE t1.sources_airport_ID = t2.sources_airport_ID 
   AND t1.destination_airport_ID = t2.destination_airport_ID 
   AND t1.airline != t2.airline

Когда я выполняю этот запрос, я получаю сообщение о том, что максимальное время выполнения превысило 300 секунд. Я не уверен, что использую правильный запрос для этой цели. Может кто-нибудь помочь мне с запросом? Я использую xampp в качестве базы данных.

Заранее спасибо!

EDIT: Мой первичный ключ - это ID, который является просто значением автоинкремента. В таблице маршрутов 64,114 записей.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Попробуйте использовать синтаксис JOIN:

SELECT t1.*, t2.*
  FROM routes AS t1
  JOIN routes AS t2
  ON   t1.sources_airport_ID = t2.sources_airport_ID 
  AND  t1.destination_airport_ID = t2.destination_airport_ID 
  AND  t1.airline != t2.airline

Но в соответствии с предложением убедитесь, что поля sources_airport_ID, destination_airport_ID и airline проиндексированы в таблице маршрутов.

0 голосов
/ 01 марта 2011

Попробуйте что-то вроде этого:

SELECT r.*, count(r.sources_airport_ID) as occ 
FROM routes r 
GROUP BY sources_airport_ID, destination_airport_ID, airline
HAVING occ > 1;
...