首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询时间慢SQL/Java

查询时间慢SQL/Java
EN

Stack Overflow用户
提问于 2013-04-15 10:17:32
回答 2查看 237关注 0票数 0

我正在查询一个有数千行的相当大的数据库。它大约需要5分钟,而它应该需要大约5秒。

代码语言:javascript
复制
    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语句吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-15 10:21:04

目前,您的查询所做的是获取表的笛卡尔乘积,因为您还没有指定它们的连接条件,也没有定义表之间的关系。

您需要为每个join语句添加一个条件或ON子句,例如

代码语言:javascript
复制
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

其中:

代码语言:javascript
复制
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,请访问下面的链接:

  • Visual Representation of SQL Joins
票数 3
EN

Stack Overflow用户

发布于 2013-04-15 10:40:19

你的问题在最后一行

代码语言:javascript
复制
FROM flights JOIN flightinfo JOIN ticket

你应该向内或向左加入他们。

你应该注意的另一件事是,如果每个航班有很多张机票,你会得到重复的航班。

如果有可能没有机票的航班,那么您将没有航班,如果使用内部连接。

我猜flightinfo总是存在的,它对航班来说是1:1。

因此,最终的解决方案将是(基于我的假设):

  • inner join flightinfo
  • left join tickets
  • 解析时请记住,每个ticket

都会复制航班

如果tickets是您的主表,并且您不需要没有门票的航班,那么可以使用FROM ticket和inner连接其他表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16006714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档