我正在查询一个有数千行的相当大的数据库。它大约需要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语句吗?
发布于 2013-04-15 10:21:04
目前,您的查询所做的是获取表的笛卡尔乘积,因为您还没有指定它们的连接条件,也没有定义表之间的关系。
您需要为每个join语句添加一个条件或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.要进一步了解joins,请访问下面的链接:
发布于 2013-04-15 10:40:19
你的问题在最后一行
FROM flights JOIN flightinfo JOIN ticket你应该向内或向左加入他们。
你应该注意的另一件事是,如果每个航班有很多张机票,你会得到重复的航班。
如果有可能没有机票的航班,那么您将没有航班,如果使用内部连接。
我猜flightinfo总是存在的,它对航班来说是1:1。
因此,最终的解决方案将是(基于我的假设):
都会复制航班
如果tickets是您的主表,并且您不需要没有门票的航班,那么可以使用FROM ticket和inner连接其他表。
https://stackoverflow.com/questions/16006714
复制相似问题