1

航空会社のルートデータを含むデータベースがあります。属性には、sources_airport_ID、destination_airport_ID、airline(送信元から宛先へのルートをサポートする)があります。テーブルに自己参加して、同じルート(つまり、同じ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を使用しています。

前もって感謝します!

編集:私の主キーはIDで、これは単なる自動インクリメント値です。ルートテーブルには64,114レコードがあります。

4

2 に答える 2

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がルートテーブルでインデックス付けされていることを確認してください。

于 2011-02-28T22:25:46.033 に答える
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;
于 2011-02-28T22:39:24.710 に答える