PostgreSQL JSONB多表关联查询出错,求正确SQL语句
正确的SQL关联查询方案
原查询的错误点
- 表名引用错误:误将
cars.details写为products.details,还错误引用了不存在的products.nutrition表,实际需关联的是cars.details与cards.additions - 字段歧义:两张表均有
value列,未指定所属表导致数据库无法识别 - 字段缺失:未包含
cards.additions中需要返回的size、color、additions字段 - JSON提取优化:使用
->会返回带双引号的JSON值,改用->>可直接获取纯字符串结果
正确的SQL查询语句
SELECT d.country_id, d.city_id, d.value ->> '$.model' AS model, d.value ->> '$.weight' AS weight, d.value ->> '$.description' AS description, a.value ->> '$.size' AS size, a.value ->> '$.color' AS color, a.value ->> '$.additions' AS additions FROM cars.details d INNER JOIN cards.additions a ON d.country_id = a.country_id AND d.city_id = a.city_id;
核心说明
- 给表设置别名
d(对应cars.details)和a(对应cards.additions),既避免字段歧义,也让语句更简洁 - 使用
->>提取JSON字段,返回无引号的纯文本,更贴合业务展示需求 - 严格按照需求筛选了所有需要返回的字段
- 关联条件完全匹配你指定的
country_id和city_id相等规则
内容的提问来源于stack exchange,提问作者Vasek
相关产品推荐
相关产品推荐

