SQL - INNER JOIN нескольких таблиц выдает синтаксическую ошибку - PullRequest
0 голосов
/ 16 июня 2020

Я немного поискал и переделал свой SQL несколько раз на основе примеров здесь и из других онлайн-источников, но каждый раз, когда я запускаю этот SQL, я получаю одно и то же "# 1064 - You есть ошибка в синтаксисе SQL.

Я пытаюсь присоединиться к четырем таблицам с помощью INNER join, и они всегда должны иметь соответствующие данные для отключения ключа (т.е. всегда должна быть одна полная строка для каждого действительного токена / 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      |
+-----------+---------------+

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 3 ]

0 голосов
/ 16 июня 2020

Рассматривая примеры других внутренних объединений, попробуйте поставить в конце оператор where и посмотреть, работает ли это?

https://www.mysqltutorial.org/mysql-inner-join.aspx/

0 голосов
/ 16 июня 2020

вам нужно добавить '' в условие условия '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'
0 голосов
/ 16 июня 2020

Здесь несколько ошибок

   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...