2011-02-28 7 views
1

항공사의 경로 데이터가 포함 된 데이터베이스가 있습니다. 일부 속성은 sources_airport_ID, destination_airport_ID 및 항공사 (출발지에서 목적지까지의 경로 지원)입니다. 동일한 루트 (즉, 동일한 sources_airport_ID 및 destination_airport_ID)를 가진 항공사를 찾기 위해 테이블을 자체 조인하려고합니다.MySQL 쿼리 질문

다음과 같이 내가 쿼리를 사용했다 :이 쿼리를 실행하면

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 

(테이블 이름 = 노선), I는 최대 실행 시간 300 초 초과 없다는 오류가 발생합니다. 이 목적을 위해 올바른 쿼리를 사용하고 있는지 확실하지 않습니다. 누구든지 문의를 도와 ​​드릴 수 있습니까? 내 데이터베이스로 xampp을 사용하고 있습니다.

미리 감사드립니다.

EDIT : 내 기본 키는 ID이며 자동 증가 값입니다. 경로 테이블에 64,114 개의 레코드가 있습니다. JOIN 구문을 사용하여

+0

? 바라기를 원하면 소스 ID와 목적지 ID. –

+0

where 절의 필드가 인덱싱됩니까? routes 테이블에 몇 개의 행이 있습니까? 얼마나 많은 성냥이있을 것으로 생각하십니까? –

답변

1

시도 :

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_IDairline는 라우팅 테이블에 색인되어 있는지 확인 않습니다. 이 같은

+0

도움을 주셔서 감사합니다. 인덱스가 진정한 해결책이었습니다! –

0

시도 뭔가 :

당신이 당신의 라우팅 테이블에이 무슨 색인
SELECT r.*, count(r.sources_airport_ID) as occ 
FROM routes r 
GROUP BY sources_airport_ID, destination_airport_ID, airline 
HAVING occ > 1; 
+0

다른 항공사에서 동일한 노선을 원하기 때문에이 방법은 작동하지 않습니다 :'t1.airline! = t2.airline' 귀하의 GROUP BY는 같은 항공사의 동일한 출발지와 도착지 경로를 찾습니다. 유효한 검색어 일 수 있지만 OP가 원하는 것은 아닙니다. –