簡體   English   中英

查詢名為“name”的列

[英]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.nameseo_surgery_city.state 他們都應該有utf8_general_ci

您應該對所有表和列使用相同的排序規則和字符集 如果您不知道使用什么排序規則,請使用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 年更新:

關鍵字“名稱”現在列在官方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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM