数据库联表查询出现奇怪错误,请求协助排查
问题解决:PostgreSQL两表联查列名报错
问题根源
PostgreSQL对列名、表名这类标识符的大小写有严格规则:
- 创建时如果没加双引号,标识符会自动转成小写存储;
- 如果创建时用双引号包裹了大小写混合的名称(比如你的
makesId),引用时必须用双引号包裹才能匹配到正确的列。
你写的models.makesId会被PostgreSQL自动转为小写models.makesid,但实际列名是大小写混合的makesId,所以数据库找不到对应的列,触发报错。
修正后的SQL语句
可以直接给列名加上双引号:
SELECT models.model, makes.make FROM models, makes WHERE models."makesId" = makes.id;
更推荐使用标准的JOIN语法,可读性更好:
SELECT models.model, makes.make FROM models INNER JOIN makes ON models."makesId" = makes.id;
执行以上语句就能正常关联两表,输出所有关联的车型和品牌信息。
内容的提问来源于stack exchange,提问作者jhoangqm
相关产品推荐
相关产品推荐

