我正在查询一个包含数千行的大型数据库。这是在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语句吗?
答案 0 :(得分: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.
要进一步了解联接,请访问以下链接:
答案 1 :(得分:0)
你的问题在最后一行
FROM flights JOIN flightinfo JOIN ticket
你应该INNER或LEFT加入他们。
您应该注意的另一件事是,如果每个航班有很多机票,您将获得航班重复。
如果可能没有航班机票,那么如果使用INNER加入,您将无法获得航班。
我猜飞行信息总是存在,而且它是飞行的1:1。
所以最终的解决方案是(基于我的假设):
如果门票是您的主要表,并且您不需要没有门票的航班,则执行FROM ticket
并将内部加入其他表。