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);
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;
返回我所期望的,每个 vin 在一行jon.vins
:
vin | make
-------------------+-----------
3GNAXUEV1KL221776 |
3GNAXHEV2KS548975 | Chevrolet
(2 rows)
但是这个查询:
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 = b.vin;
回报:
vin | style
-------------------+------------------
3GNAXHEV2KS548975 | FWD 4dr LS w/1LS
(1 row)
就好像jsonb_array_elements
在选择中将左连接变成了内连接。
我希望看到一行 vin 3GNAXUEV1KL221776 的样式为空值。
我究竟做错了什么?