具有名为 "name" 的列的查询



我正在尝试联接几个表,但在联接语句中失败了。我相信这是因为第二个联接中的列名是"name",也许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]167-操作'='的排序规则(utf8_unicode_ci,IMPLICIT)和(utf8-general_ci,IMPLICT)非法混合

当我用反勾号包围字段时,我得到以下内容:

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

我得到了以下内容:

[Err]1054-"on clause"中的未知列"st.name"

它在上也会失败

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

(单引号=背面勾选,但此处无法正确显示)

[Err]167-操作'='的排序规则(utf8_unicode_ci,IMPLICIT)和(utf8-general_ci,IMPLICT)非法混合

也出现故障

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

[Err]167-操作'='

的排序规则(utf8_unicode_ci,IMPLICIT)和(utf8-general_ci,IMPLICIT)的非法混合

您应该接受带有backtick:的列名

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.nameseo_surgery_city.state。他们都应该有utf8_general_ci

尝试将列名放在后引号中,如st.name。请参阅文档。

您应该对所有表和列使用相同的排序规则和字符集。如果您不知道使用什么排序规则,请使用utf8_general_ciutf8字符集。

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:

关键字"name"现在在";关键字和保留字"MySQL官方文档列表。你可以在那里找到所有的保留字。

参考:https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-尾-N

相关内容

  • 没有找到相关文章

最新更新