我做了一个查询,并希望没有任何重复,但我有一些重复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时,我看到更多,即使你使用不同,请给我一些帮助!
答案 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;