如何在JOIN中引用列?关联查询遇#1054未知列错误求助
问题解决与列表示方式说明
先修复你的JOIN错误
你碰到的#1054错误,核心原因大概率是表名大小写不匹配:
- 你的表名是
DocType(首字母大写,Type部分也大写),但ON子句里写的是Doctype.ID(Type变成了小写)。如果数据库运行在区分大小写的环境(比如Linux系统下的MySQL),会把Doctype和DocType判定为两个不同的表,自然找不到Doctype.ID这个列。
另外,JOIN语法里的括号完全多余,正确的查询应该写成:
SELECT * FROM Document LEFT JOIN DocType ON DocType.ID = Document.DocType
如果一定要保留括号(比如子查询场景),也必须保证表名大小写完全一致:
SELECT * FROM Document LEFT JOIN (DocType) ON DocType.ID = Document.DocType
除table.column外的列表示方式
除了最常用的表名.列名写法,还有以下几种可选方式:
别名.列名:给表设置别名,简化书写,多表关联时更清晰:
SELECT d.*, dt.TypeName FROM Document d LEFT JOIN DocType dt ON dt.ID = d.DocType这里
d是Document的别名,dt是DocType的别名,用别名替代完整表名,代码更简洁易读。直接写列名:当关联的多个表中没有重名列时,可以直接写列名,数据库会自动识别所属表:
SELECT * FROM Document LEFT JOIN DocType ON ID = DocType但这种写法不推荐,后续表结构新增重名列时,查询会立刻报错,可读性也差。
数据库名.表名.列名:涉及跨数据库查询时,可加上数据库前缀:
SELECT * FROM mydb.Document LEFT JOIN mydb.DocType ON mydb.DocType.ID = mydb.Document.DocType适用于需要访问其他数据库中表的场景。
内容的提问来源于stack exchange,提问作者Joseph Klug
相关产品推荐
相关产品推荐

