Запрос со столбцом с именем «имя» - PullRequest
3 голосов
/ 17 января 2012

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

Он также не срабатывает на

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) для операции '='

Ответы [ 3 ]

1 голос
/ 17 января 2012

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

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.

1 голос
/ 17 января 2012

Вы должны использовать одинаковые параметры сортировки и кодировки для всех таблиц и столбцов . Если вы не знаете, какую сортировку использовать, используйте кодировку 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';
1 голос
/ 17 января 2012

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

...