mysql - 使用名为 "name"的列进行查询

标签 mysql mysql-error-1267

我正在尝试连接几个表,但它在我的连接语句上失败了。我相信这是因为第二个连接中的列名是“名称”,也许 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 - “on 子句”中的未知列“st.name”

它也失败了

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) 的非法混合

最佳答案

您应该用反引号包含列名:

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

关于mysql - 使用名为 "name"的列进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8897801/

相关文章:

MYSQL 区分大小写搜索 utf8_bin 字段

MySQL IP 转换 IF 语句不工作 : Illegal mix of collations

php - 将文本字段和 html 表与数据库连接

mysql - 从双连接表中选择最大值

php - 如何使用数据库中的数据和for循环生成表(php)

mysql - 使用 utf8_encode()(php 函数)的国际化内容最佳实践

mysql 非法混合排序规则(latin1_swedish_ci,IMPLICIT)

mysql - 如果连接不匹配或字段为空,则将行插入表中

mySQL:YA 无效的查询语法错误

mysql - 连接2个表时mysql中的错误