PostgreSQL单双引号用法及user与transaction表关联查询问题
PostgreSQL 双表关联查询解决方案
问题根因
user是 PostgreSQL 的内置保留字,直接作为表名查询时会被系统识别为关键字,无法正确匹配表,是查询无结果的常见原因- 若建表时使用了驼峰命名的字段(如
partnerUserId),PostgreSQL 默认会将未加双引号的标识符自动转为小写,会出现字段不匹配的问题
PostgreSQL 引号使用规则
- 单引号
':仅用于包裹字符串类型的查询值,例如WHERE name = '测试用户' - 双引号
":用于包裹标识符(表名、字段名),仅当标识符为保留字、包含大小写、包含特殊字符/空格时需要使用,普通全小写无特殊字符的标识符可以省略
正确查询语句
内连接(仅返回两张表完全匹配的记录)
SELECT u.*, t.* FROM "user" u INNER JOIN "transaction" t ON u.id = t."partnerUserId";
左连接(保留 user 表全量记录,无匹配交易的字段返回空值)
SELECT u.*, t.* FROM "user" u LEFT JOIN "transaction" t ON u.id = t."partnerUserId";
简化规则
如果建表时 transaction 的 partnerUserId 字段实际为全小写命名,可去掉字段的双引号,语句简化为:
SELECT u.*, t.* FROM "user" u LEFT JOIN transaction t ON u.id = t.partneruserid;
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

