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 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 join,您将无法获得航班。

我猜航班信息总是存在的,并且与航班是 1:1 的。

所以最终的解决方案是(基于我的假设):

  • 内联飞行信息
  • 左加入票
  • 解析时请记住,每张机票都会重复航班

如果门票是您的主表,并且您不需要没有机票的航班,那么请在FROM ticket内部加入其他表。

于 2013-04-15T02:40:19.310 回答