如何阻止INNER JOIN显示重复数据
问题描述:
我正在处理多个表上的数据,我正在尝试获取一些信息,但我不断收到重复数据。如何阻止INNER JOIN显示重复数据
SELECT Airport.city, StateInfo.state_name, TravelInfo.destination,
Carrier.unique_carrier_name, CarrierInfo.passengers
FROM Airport
INNER JOIN TravelInfo
ON Airport.airport_id = TravelInfo.destination_airport_id
INNER JOIN Flights
ON Airport.airport_id = Flights.destination_airport_id
INNER JOIN StateInfo
ON Airport.airport_id = StateInfo.airport_id
INNER JOIN Carrier
ON Flights.airline_id = Carrier.airline_id
INNER JOIN CarrierInfo
ON Carrier.airline_id = CarrierInfo.airline_id
WHERE Airport.state = 'CO';
我所要做的就是让城市名称的载体和一些乘客,但似乎输出不断重复的数据。 例如,我会得到:
正如你可以看到数据被重复几百次是有办法解决这一问题?
答
你可以总结城市和目的地的passangers。
SELECT Airport.city, StateInfo.state_name, TravelInfo.destination,
Carrier.unique_carrier_name
,sum(CarrierInfo.passengers) as passengers
FROM Airport
INNER JOIN TravelInfo
ON Airport.airport_id = TravelInfo.destination_airport_id
INNER JOIN Flights
ON Airport.airport_id = Flights.destination_airport_id
INNER JOIN StateInfo
ON Airport.airport_id = StateInfo.airport_id
INNER JOIN Carrier
ON Flights.airline_id = Carrier.airline_id
INNER JOIN CarrierInfo
ON Carrier.airline_id = CarrierInfo.airline_id
WHERE Airport.state = 'CO'
GROUP BY 1,2,3,4;
但我相信这会结束乘客数量,因为我在您的输出中看到重复的passangers。所以在你的加入中,你正在复制数据。
你在找**不同**吗? – L30n1d45
当您使用非primaryKey列内连接表时,可能会得到重复查询的数据。例如:在TravelInfo表中可能有多个记录与同一个desitination_airport_id相同,或者在Flights表中具有相同destination_airport_id的多个记录。如果您可以根据“CarrierInfo.passengers = 7713”为每个表检索一些示例数据并将其发布到此处,我们可以更好地了解我们正在处理的内容。 –
嗨。请清楚地解释“获取重复数据”,以及为什么这是一个问题 - 为什么*输出不是你想要的 - 即告诉我们你的查询是什么意思。你没有清楚地说出连续的“乘客人数”与其“城市名称”和“承运人”之间的关系。请阅读并在[mcve]上采取行动。 [如果可以,请使用文字。喜欢,而不是该图像。](https://*.com/questions/14588304/composite-primary-key-vs-additional-id-column)。 – philipxy