0

何千行もあるかなり大規模なデータベースにクエリを実行しています。約 5 秒かかるはずですが、5 分ほどかかります。

    ResultSet rs = st.executeQuery("SELECT flights.airline, flights.flight_num,"
            + "origin_airport_code, destination_airport_code,"
            + "ticket.date, ticket.bought_date, ticket.price "
            + "FROM flights JOIN flightinfo JOIN ticket");

特定の種類の結合 JOIN ステートメントを使用する必要がありますか?

4

2 に答える 2

3

現在、結合条件を指定していないか、テーブルが互いにどのように関連しているかを定義していないため、クエリはテーブルのデカルト積を取得します。

ON結合ステートメントごとに条件または句を追加する必要があります。

SELECT  flights.airline, 
        flights.flight_num,
        origin_airport_code, 
        destination_airport_code,
        ticket.date, 
        ticket.bought_date, 
        ticket.price 
FROM    flights 
        INNER JOIN flightinfo 
            ON flights.colName = flightinfo.colname  -- << 1
        INNER JOIN ticket
            ON table.ColName = ticket.colName        -- << 2

どこ:

1 >> Colname >> how the two tables:flights and flightinfo, are related
2 >> table >> I don't know where the table ticket will be joined, it is 
              either flights or flightinfo.

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-04-15T02:21:03.607 に答える
0

あなたの問題は最後の行にあります

FROM flights JOIN flightinfo JOIN ticket

INNER または LEFT に参加する必要があります。

注意すべきもう 1 つの点は、フライトごとに多くのチケットがある場合、フライトが重複することです。

フライトのチケットがない可能性がある場合は、INNER ジョインを使用するとフライトが取得されません。

flightinfo は常に存在し、フライトとは 1:1 であると思います。

したがって、最終的な解決策は(私の仮定に基づいて)次のようになります。

  • 内部結合フライト情報
  • 左の参加チケット
  • 解析するときは、チケットごとにフライトが複製されることに注意してください

チケットがプライマリ テーブルで、チケットのないフライトが必要ない場合はFROM ticket、他のテーブルを内部結合します。

于 2013-04-15T02:40:19.310 に答える