Отсутствует ошибка закрывающей скобки с оператором «USING» MYSQL - PullRequest
0 голосов
/ 21 апреля 2020

Я получаю Syntax error: missing 'closing parenthesis', когда добавляю спецификатор в мой оператор USING

Вот пример, аналогичный тому, что я делаю:

SELECT * FROM student s JOIN test_result using (s.id) where s.id = 1335;

Мой фактический запрос гораздо сложнее, у меня есть несколько таблиц, к которым я хочу присоединиться, и в некоторых таблицах есть столбцы с одинаковыми именами, поэтому при попытке JOIN одной из этих таблиц с третьей таблицей я получаю Error Code: 1052. Column 's.id' in from clause is ambiguous. Когда я пытаюсь избежать этого, указав, какую таблицу id я хочу использовать, я получаю Syntax error: missing 'closing parenthesis'

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Читая ваш комментарий, я думаю, вам нужно объединение на основе псевдонима

SELECT *
FROM student s
JOIN test_result t ON t.id = s.id
where s.id = 1335;
1 голос
/ 21 апреля 2020

Столбцы в предложении USING() не принимают псевдонимы - основная идея состоит в том, что этот столбец должен быть доступен в обеих таблицах.

Это также имеет преимущество устранения неоднозначности столбца, поэтому вам не нужно добавлять префикс к псевдониму таблицы в пункте WHERE.

Просто:

SELECT * 
FROM student s 
INNER JOIN test_result ts USING (id) 
WHERE id = 1335;

Недостатком является то, что, если вы используете это в нескольких Соедините контекст, где несколько таблиц имеют столбец id, из 1011 * вы не можете выбрать, какая таблица id выбрана. Это может быть неприятно в некоторых ситуациях. В этом случае вам необходимо вернуться к синтаксису join ... on ...:

SELECT * 
FROM student s 
INNER JOIN test_result ts on ts.id = s.id
WHERE id = 1335;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...