3

いくつかのテーブルを結合しようとしていますが、結合ステートメントで失敗しています。2番目の結合の列名が「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 を参照する 2 番目の左結合です。その列を適切に参照する方法についてのアイデアはありますか? 残念ながら、テーブルの列名を変更することは、現時点ではオプションではありません:( ..

ありがとう、

シルバータイガー

アップデート:

上記のクエリで発生するエラーは次のとおりです。

[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) の不正な組み合わせ

4

4 に答える 4

1

バッククォートで列名を受け入れる必要があります。

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

于 2012-01-17T16:12:44.717 に答える
1

のように、列名を逆引用符で囲んでみてくださいst.nameドキュメントを参照してください

于 2012-01-17T16:10:16.900 に答える
1

すべてのテーブルと列に同じ照合順序と文字セットを使用する必要があります。使用する照合順序がわからない場合は、文字セットを使用して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';
于 2012-01-17T16:20:19.820 に答える
0

2022 年更新:

キーワード「名前」は、公式の MySQL ドキュメントの「キーワードと予約語」リストに記載されています。そこにはすべての予約語があります。

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

于 2022-02-07T10:44:44.633 に答える