Запрос со столбцом с именем "имя"

Я пытаюсь объединить несколько таблиц, но это не удается в моем заявлении соединения. Я полагаю, что это потому, что имя столбца во втором соединении является "имя" и, возможно, MySQL думает, что я пытаюсь получить доступ к атрибуту? как я могу обойти это?

SELECT surgery_city.*, s.surgeon_type, st.abbrev
FROM surgery_city 
LEFT JOIN surgery_key as s ON s.surg_id = treatment_id 
LEFT JOIN states as st ON st.name = surgery_city.state
WHERE treatment_id='10001'

Проблема заключается во втором левом соединении, где я ссылаюсь на st.name - есть идеи, как правильно ссылаться на этот столбец? изменение имени столбца в таблице, к сожалению, пока невозможно:(..

Спасибо,

Серебряный тигр

ОБНОВИТЬ:

Ошибка, которую я получаю на запрос выше:

[Err] 1267 - недопустимое сочетание параметров сортировки (utf8_unicode_ci,IMPLICIT) и (utf8_general_ci,IMPLICIT) для операции '='

когда я окружаю поле обратными галочками, я получаю следующее:

LEFT JOIN states as st ON `st.name` = seo_surgery_city.state

Вместо этого я получаю следующее:

[Err] 1054 - Неизвестный столбец 'st.name' в 'on clause'

Это также терпит неудачу на

LEFT JOIN states as st ON st.`name` = seo_surgery_city.state

(одинарные кавычки = обратные галочки там, но они не будут отображаться здесь правильно)

[Err] 1267 - недопустимое сочетание параметров сортировки (utf8_unicode_ci,IMPLICIT) и (utf8_general_ci,IMPLICIT) для операции '='

Также не удается

LEFT JOIN states as st ON `st`.`name` = seo_surgery_city.state

[Err] 1267 - недопустимое сочетание параметров сортировки (utf8_unicode_ci,IMPLICIT) и (utf8_general_ci,IMPLICIT) для операции '='

4 ответа

Решение

Вы должны заключить имя столбца в кавычки:

st.`name`

UPD

Проблема в том, что столбцы имеют разные параметры сортировки, попробуйте следующее:

SELECT surgery_city.*, s.surgeon_type, st.abbrev
FROM surgery_city 
LEFT JOIN surgery_key as s ON s.surg_id = treatment_id 
LEFT JOIN states as st ON st.name = (surgery_city.state COLLATE utf8_unicode_ci)
WHERE treatment_id='10001'

Но чтобы это исправить, вы должны обновить параметры сортировки для одного из столбцов: states.name или же seo_surgery_city.state, Они оба должны иметь utf8_general_ci,

Попробуйте поместить имя столбца в кавычки, например, st.name, Смотрите документы.

Вы должны использовать одинаковые параметры сортировки и кодировки для всех таблиц и столбцов. Если вы не знаете, какую сортировку использовать, используйте utf8_general_ci а также utf8 кодировок.

ALTER TABLE seo_surgery_city CONVERT TO CHARACTER SET utf8 COLLATE 'utf8_general_ci';
ALTER TABLE seo_surgery_key CONVERT TO CHARACTER SET utf8 COLLATE 'utf8_general_ci';
ALTER TABLE states CONVERT TO CHARACTER SET utf8 COLLATE 'utf8_general_ci';

Обновление 2022:

Ключевое слово «имя» теперь указано в списке «ключевые слова и зарезервированные слова» официальной документации MySQL. Там вы можете найти все зарезервированные слова.

Ссылка: https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detailed-N

Другие вопросы по тегам