小编jon*_*jon的帖子

选择中的 jsonb_array_elements() 似乎将左连接变成了内连接

PostgreSQL 9.6。

create table jon.vins (vin citext primary key);
insert into jon.vins values
('3GNAXUEV1KL221776'),
('3GNAXHEV2KS548975');

CREATE TABLE jon.describe_vehicle (
  vin citext primary key,
  response jsonb);
Run Code Online (Sandbox Code Playgroud)

jon.describe_vehicle 仅包含 1 vin,3GNAXHEV2KS548975 的数据;

这个查询:

    select a.vin,
      b.response->'attributes'->>'bestMakeName' as make
    from jon.vins a
    left join jon.describe_vehicle b on a.vin = b.vin;
Run Code Online (Sandbox Code Playgroud)

返回我所期望的,每个 vin in 一行jon.vins

        vin        |   make    
-------------------+-----------
 3GNAXUEV1KL221776 | 
 3GNAXHEV2KS548975 | Chevrolet
(2 rows)
Run Code Online (Sandbox Code Playgroud)

但是这个查询:

    select a.vin,
      jsonb_array_elements(b.response->'style')->'attributes'->>'name' as style
    from jon.vins a
    left join jon.describe_vehicle b on a.vin = …
Run Code Online (Sandbox Code Playgroud)

postgresql set-returning-functions

5
推荐指数
1
解决办法
1万
查看次数