Запрос со столбцом с именем "имя"
Я пытаюсь объединить несколько таблиц, но это не удается в моем заявлении соединения. Я полагаю, что это потому, что имя столбца во втором соединении является "имя" и, возможно, 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