我正在处理大量GTFS数据,并根据现有数据创建一个附加表。为此,我使用以下查询。
INSERT INTO connections
(SELECT
stop_timesD.departure_time,
stop_timesD.stop_sequence AS stop_sequence_departure,
stop_timesD.stop_id AS stop_id_departure,
trips.trip_id,
trips.direction_id,
stop_timesA.arrival_time,
stop_timesA.stop_sequence AS stop_sequence_arrival,
stop_timesA.stop_id AS stop_id_arrival
FROM trips
INNER JOIN stop_times AS stop_timesD ON trips.trip_id = stop_timesD.trip_id
INNER JOIN stop_times AS stop_timesA ON trips.trip_id = stop_timesA.trip_id
INNER JOIN calendar_dates ON trips.service_id = calendar_dates.service_id
WHERE calendar_dates.date = '20190302' AND stop_timesD.stop_sequence < stop_timesA.stop_sequence);
现在,这将产生我正确需要的数据集。但是,由于每个查询(即SELECT * FROM connections;)都不会返回任何数据,因此插入该表的表似乎不可查询。此外,服务器在查询完成后仍会继续消耗大量CPU资源,并会为“免费数据”产生很大的价值(我怀疑它正在清理或编制索引)。
使用修改后的查询来创建新表(CREATE TABLE connections SELECT ...)确实会产生所需的结果,即使表布局没有差异。