访问SQL查询,没有重复的结果

时间:2017-04-22 17:57:17

标签: sql ms-access

我做了一个查询,并希望没有任何重复,但我有一些重复3次,当我使用DISTINCT或DISTINCTROW时,我只有2个重复。

SELECT f.flight_code, 
       f.status, 
       a.airport_name, 
       a1.airport_name, 
       f.departing_date+f.departing_time AS SupposedDepartingTime,  
       f.landing_date+f.landing_time AS SupposedLandingTime, 
       de.actual_takeoff_date+de.actual_takeoff_time AS ActualDepartingTime,  
       SupposedLandingTime+(ActualDepartingTime-SupposedDepartingTime) AS ActualLandingTime
FROM 
(((Flights AS f 
   LEFT JOIN Aireports AS a 
      ON a.airport_code = f.depart_ap) 
   LEFT JOIN Aireports AS a1 
      ON f.target_ap = a1.airport_code)
   LEFT JOIN Irregular_Events AS ie 
      ON f.flight_code = ie.flight_code)
   LEFT JOIN Delay_Event AS de 
      ON ie.IE_code = de.delay_code;

不得不使用LEFT JOIN,因为当我使用INNER JOIN时,我错过了一些我想要展示的东西,因为我想看到所有的航班,而不仅仅是那些延误或取消的航班。

这是我使用INNER JOIN时的结果,你只能看到状态为“ביטול”或“עיכוב”的航班,而这不是我想要的。

the results with LEFT JOIN 当我使用DISTINCT,你看到第一列上有NUMBER 6的行时,它只出现两次

重要! 我刚检查了我的查询和我在那里使用的所有表格,我看到了我的问题,但不知道如何解决它! 在表Irregular_Events中我有更多的航班3,6和8的一个事件,这就是为什么当我使用LEFT JOIN时,我看到更多,即使你使用不同,请给我一些帮助!

2 个答案:

答案 0 :(得分:1)

如果没有看到表结构,并不完全确定,但这可能有效:

SELECT f.flight_code, 
       f.status, 
       a.airport_name, 
       a1.airport_name, 
       f.departing_date+f.departing_time AS SupposedDepartingTime,  
       f.landing_date+f.landing_time AS SupposedLandingTime, 
       de.actual_takeoff_date+de.actual_takeoff_time AS ActualDepartingTime,  
       SupposedLandingTime+(ActualDepartingTime-SupposedDepartingTime) AS ActualLandingTime
FROM 
((Flights AS f 
   LEFT JOIN Aireports AS a 
      ON a.airport_code = f.depart_ap) 
   LEFT JOIN Aireports AS a1 
      ON f.target_ap = a1.airport_code)
   LEFT JOIN 
   (
   SELECT 
   ie.flight_code,
   de1.actual_takeoff_date,
   de1.actual_takeoff_time
   FROM
   Irregular_Events ie
   INNER JOIN Event AS de1
      ON ie.IE_code = de1.delay_code
   ) AS de
      ON f.flight_code = de.flight_code

答案 1 :(得分:0)

如果没有任何输出样本,并且没有任何表格结构的描述,很难说出你的查询有什么问题。

但是你的问题是你正在查询flights表格,[我假设]可以链接到多个irregular_events,这可能也会链接到多个delay_event

如果您希望每次航班只获得一行,则需要确保您的联接也只返回一行。也许你可以通过在连接中添加一个条件,或者通过在子查询中添加条件来实现。

修改

您可以尝试在查询中添加GROUP BY

   GROUP BY 
      f.flight_code, 
      f.status, 
      a.airport_name, 
      a1.airport_name;