在MySQL中连接多个表:"未知列"

rin*_*t.6 2 mysql sql

JOIN在MySQL中遇到一个简单的错误.我错过了一些明显的东西吗

SELECT stop_times.stop_sequence
FROM stop_times
INNER JOIN stops ON stop_times.stop_id = stops.stop_id
INNER JOIN trips ON stop_times.trip_id = trips.trip_id
WHERE stops.stop_code = :stopCode;
Run Code Online (Sandbox Code Playgroud)

哪个:stopCode是通过PDO绑定的参数.

我得到的错误是: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'stop_times.trip_id' in 'on clause''

这三个表的数据库模式是:

stop_times
----------
trip_id VARCHAR(23) NOT NULL -- PK
arrival_time TIME NOT NULL
departure_time TIME NOT NULL
stop_id INT(10) UNSIGNED NOT NULL -- PK
stop_sequence INT(10) UNSIGNED NOT NULL -- PK


stops
-----
stop_id INT(10) UNSIGNED NOT NULL -- PK
stop_code INT(5) UNSIGNED NULL
stop_name VARCHAR(53) NOT NULL
stop_lat DECIMAL(8, 6) NOT NULL
stop_lon DECIMAL(9, 6) NOT NULL
stop_url VARCHAR(66) NULL

trips
-----
route_id INT(8) UNSIGNED NOT NULL
service_id VARCHAR(6) NOT NULL
trip_id VARCHAR(23) NOT NULL -- PK
trip_headsign VARCHAR(255) NOT NULL
Run Code Online (Sandbox Code Playgroud)

我也试过使用别名但是没有用.在Microsoft Access中运行查询,但生成的SQL在JOIN语句周围有括号.

为什么我的查询不起作用?

Mic*_*son 12

您是否在实际查询中使用反向刻度(```)来转义表/列名称,但是将它们从您的问题中剥离出来?我猜是的,因为他们可能会给你一些格式问题,因为Stack Overflow使用它们来转义代码块...

我的猜测是你打算写:

INNER JOIN `trips` ON `stop_times`.`trip_id` = `trips`.`trip_id`
Run Code Online (Sandbox Code Playgroud)

但相反,你写道:

INNER JOIN `trips` ON `stop_times.trip_id` = `trips`.`trip_id`
Run Code Online (Sandbox Code Playgroud)

由于您缺少一对后退标记,因此会将其视为单个列名称,从而导致以下错误:

'on子句'中的未知列'stop_times.trip_id':SELECT stop_times.stop_sequence FROM stop_times INNER JOIN stop ON stop_times.stop_id = stops.stop_id INNER JOIN stop_times.trip_idtrip ON = trips.trip_id WHERE stops.stop_code = 1

SQL小提琴显示假定的错误