2011-02-28 251 views
1

我有一個數據庫,其中包含航空公司的航線數據。 某些屬性是sources_airport_ID,destination_airport_ID和airline(支持從源到目的地的路由)。 我想自己加入表查找具有相同路線的航空公司(換句話說,相同的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 

當我執行此查詢,我得到一個錯誤,說的最長執行時間超過300秒。我不確定是否爲此使用了正確的查詢。 任何人都可以幫我查詢嗎?我使用xampp作爲我的數據庫。

在此先感謝!

編輯: 我的主鍵是ID,它只是一個自動增量值。 航線表共有64,114條記錄。

+0

你對你的路由表的索引是什麼?希望來源和目標ID。 – 2011-02-28 22:14:52

+0

where子句中的字段是否被索引?路線表中有多少行?你認爲可能有多少場比賽? – 2011-02-28 22:14:54

回答

1

嘗試使用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_IDairline在路由表進行索引。

+0

感謝您的幫助。索引是真正的解決方案! – 2011-02-28 23:22:36

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想要的。 – 2011-02-28 22:50:18