MySQL内部联接查询语法错误

And*_*Dev 2 mysql

我是MySQL的新手,无法弄清楚这里出了什么问题。我有两张桌子。左表称为“锻炼”。相关列是date(类型日期)和id(类型int)。

右边的表格称为Workout_locations(相关字段:)workout_id type int, and location_id type int

连接字段是Workouts.idWorkout_locations.workout_id

我要做的就是得到一个两列的表:(date来自“锻炼”)和location_id(来自Workout_locations)。我只需要Workouts基于几个字段就可以从表中提取记录(sql语句应清楚表明这一点)。

这是我的SQL语法:

SELECT Workouts.date as date, Workout_locations.location_id as loc_id
FROM Workouts 
WHERE Workouts.pacegroup_id='9' AND (Workouts.date BETWEEN '2013-08-19' AND '2013-08-25') 
INNER JOIN Workout_locations ON Workouts.id=Workout_locations.workout_id"
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误:

您的SQL语法有误;在第1行的“ INNER JOIN Workout_locations ON Workouts.id = Workout_locations.workout_id”附近,查看与您的MySQL服务器版本相对应的手册以使用正确的语法。

我希望对于有经验的人来说,这是一个非常容易发现的错误。有人看到吗?谢谢!

jte*_*rry 6

INNER JOIN应该来之前WHERE。我也认为您不需要子句周围BETWEEN的括号,但我怀疑这两种方式都会导致错误:

SELECT Workouts.date as date, Workout_locations.location_id as loc_id 
FROM Workouts 
INNER JOIN Workout_locations ON Workouts.id=Workout_locations.workout_id
WHERE Workouts.pacegroup_id = '9' 
AND Workouts.date BETWEEN '2013-08-19' AND '2013-08-25';
Run Code Online (Sandbox Code Playgroud)

另外,尽管从技术上讲,它们使您摆脱了它,但您应避免使用“ date”作为选定的列名(这是一个保留字)。

您还可以进行一些简化以使内容更易于阅读:

SELECT Workouts.date AS wo_date, Workout_locations.location_id AS loc_id
FROM Workouts w
INNER JOIN Workout_locations l ON w.id = l.workout_id
WHERE w.pacegroup_id = '9'
AND w.date BETWEEN '2013-08-19' AND '2013-08-25';
Run Code Online (Sandbox Code Playgroud)