mysql - SQL - 多个表的 INNER JOIN 引发语法错误
问题描述
我已经进行了一些搜索,并根据此处和其他在线资源的示例多次重新编写了我的 SQL,但每次运行此 SQL 时,我都会得到相同的“#1064 - 你的 SQL 语法有错误“ 错误。
我正在尝试使用 INNER 连接来连接四个表,它们应该总是有匹配的数据来关闭(即每个有效的 token/token_id 应该总是有一个完整的行)。我正在使用 MySQL 5.7.26 版这是我要运行的查询:
SELECT
i.name AS invitee_name,
c.first_name AS child_first,
c.last_name AS child_last,
s.invite_status,
c.avatar
FROM
Invites AS i, Tokens AS t, Children AS c, Invite_Statuses AS s
WHERE
t.token = sdie02d
INNER JOIN
t ON t.token_id = i.token_id
INNER JOIN
c ON c.child_id = i.child_id
INNER JOIN
s ON s.status_id = i.status_id
我(每次)收到的完整错误是:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN
t ON t.token_id = i.token_id
INNER JOIN
c ON c.child_id ' at line 11
表格如下所示:
Invites
+---------+----------+----------+-----------+---------------+----------+
| user_id | child_id | token_id | status_id | email | name |
+---------+----------+----------+-----------+---------------+----------+
| 9 | 2 | 1 | 1 | a@example.com | John Doe |
| 9 | 3 | 2 | 1 | b@example.com | Jane Doe |
+---------+----------+----------+-----------+---------------+----------+
Tokens
+----------+---------+
| token_id | token |
+----------+---------+
| 1 | 93kd8i0 |
| 2 | sdie02d |
| 3 | fsj2d9c |
+----------+---------+
Children
+----------+------------+-----------+--------+
| child_id | first_name | last_name | avatar |
+----------+------------+-----------+--------+
| 1 | Timmy | Johnson | 4 |
| 2 | Jenny | Smith | 32 |
| 3 | Jake | Jones | 12 |
+----------+------------+-----------+--------+
Invite_Statuses
+-----------+---------------+
| status_id | invite_status |
+-----------+---------------+
| 1 | invited |
| 2 | accepted |
| 3 | rejected |
+-----------+---------------+
感谢您的任何帮助,您可以提供。
解决方案
您需要在 where 子句条件 'qme34j' 中添加 ''
declare @Tokens Table ( token_id int, token varchar(100))
declare @Children Table ( child_id int, first_name varchar(100), last_name varchar(100), avatar int)
declare @Invite_Statuses table (status_id int, invite_status varchar(100))
SELECT
i.name AS invitee_name,
c.first_name AS child_first,
c.last_name AS child_last,
s.invite_status,
c.avatar
FROM
@Invites AS i
INNER JOIN @Tokens AS t
ON t.token_id = i.token_id
INNER JOIN @Children AS c
ON c.child_id = i.child_id
INNER JOIN @Invite_Statuses AS s
ON s.status_id = i.status_id
WHERE
t.token = 'qme34jh'
推荐阅读
- c# - TFS 上的编译错误 - 未引用程序集中定义
- hadoop - 如何在没有键值对的情况下保存 Mapreduce 的 Reducer 输出?
- javascript - 带有 css 的数据库内容的工具提示
- rxjs - rxjs 中 scan(...) 和 subscribe(...) 的区别
- android - 证书颁发机构不受信任,在 android webview 中但在移动浏览器中工作正常
- android - 如何使用 GoogleMap SDK 列出附近的地点?
- algorithm - 确定分治算法的适当递归函数
- python - 如何用两个 2D 数组 (x,y) 和 0D 数组即标量 (z) 绘制等高线图?
- scala - 如何从 parquet 文件中选择 13 位时间戳列,将其转换为日期并存储为数据框?
- reactjs - 如何修复'动作必须是普通对象。使用自定义中间件进行异步操作。