看了語法明明欄位就是存在,但它卻說

Unknown column 'xxxxx' in 'on clause'

這裡有解決方式
https://ma.ttias.be/mysql-1054-unknown-column-tablecolumnname-in-on-clause-even-though-column-name-exists/

就是把

SELECT *
FROM table1, table2
INNER JOIN table3 on table1.columnname = table3.columnname;

換成

SELECT *
FROM (table1, table2)
INNER JOIN table3 on table1.columnname = table3.columnname;

只是多了括號就解決了

中文說明

引用 https://segmentfault.com/a/1190000002472364

問題的原因就是ANSI-89的規範和ANSI-92的規範混用導致的。也就是說在進行多表聯合查詢的時候要避免這種寫法SELECT xx FORM table1, table2 join table3 on table1.xx = table2.xx ....出現這種情況就會報錯,具體的原因是因為操作符的優先級不同導致的,逗號的優先級要比join的優先級要低,因此上面的語句實際的效果相當於是這樣SELECT xx FORM table1, (table2 join table3 on table1.xx = table2.xx .. ..),注意括號裡面的語句,因為優先級較高所以先解析,而這時候是找不到table1的字段的,因此就會出現unknown column in ON clause的錯誤。解決辦法就是不要使用逗號操作符來進行連表查詢,上面的語句應該修改成為SELECT xx FORM table1 join table2 on table1.id = table2.id join table3 on table1.xx = table2.xx ....

最後修改日期: 2018 年 03 月 09 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。