[英]Named Query to SELECT rows with MAX(column name), DISTINCT by another column
[英]Query with column named "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 的第二個左連接 - 關於如何正確引用該列的任何想法? 不幸的是,此時更改表中的列名不是一個選項:(..
謝謝,
銀虎
更新:
我在上面的查詢中得到的錯誤是:
[錯誤] 1267 - 操作 '=' 的排序規則 (utf8_unicode_ci,IMPLICIT) 和 (utf8_general_ci,IMPLICIT) 的非法混合
當我用反勾號包圍該字段時,我得到以下信息:
LEFT JOIN states as st ON `st.name` = seo_surgery_city.state
我得到以下信息:
[錯誤] 1054 - “on 子句”中的未知列“st.name”
它也失敗了
LEFT JOIN states as st ON st.`name` = seo_surgery_city.state
(單引號 = 那里有反引號,但它不會在這里正確顯示)
[錯誤] 1267 - 操作 '=' 的排序規則 (utf8_unicode_ci,IMPLICIT) 和 (utf8_general_ci,IMPLICIT) 的非法混合
也失敗了
LEFT JOIN states as st ON `st`.`name` = seo_surgery_city.state
[錯誤] 1267 - 操作 '=' 的排序規則 (utf8_unicode_ci,IMPLICIT) 和 (utf8_general_ci,IMPLICIT) 的非法混合
嘗試將列名放在反引號中,例如st.name
。 請參閱文檔。
您應該使用反引號包含列名:
st.`name`
更新程序
問題是列有不同的排序規則,請嘗試以下操作:
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
。
您應該對所有表和列使用相同的排序規則和字符集。 如果您不知道使用什么排序規則,請使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.