SQL - 多个表的INNER JOIN出现语法错误。

问题描述 投票:-3回答:1

我做了一些搜索,并根据这里的示例和其他在线资源重新编写了多次 SQL,但每次运行这个 SQL 时,我都会得到同样的 "#1064 - 您的 SQL 语法错误 "错误。

我试图使用INNER join连接四张表,它们应该总是有匹配的数据作为key off(即每一个有效的tokentoken_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 | [email protected] | John Doe |
|       9 |        3 |        2 |         1 | [email protected] | 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      |
+-----------+---------------+

谢谢你提供的任何帮助

mysql sql inner-join
1个回答
0
投票

这里有多个错误

   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

0
投票

看了一下其他内部连接的例子,试试把'where'语句放在最后,看看是否有效?

https:/www.mysqltutorial.orgmysql-inner-join.aspx


0
投票

你需要在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'
© www.soinside.com 2019 - 2024. All rights reserved.