Postgres,如何对 JSONB 数组整数进行 LEFT JOIN
Postgres, How to do a LEFT JOIN on JSONB array integer
我有一个 table“照片”,引用了照片中显示的人物列表。
这些人在名为“persons”的 JSONB 列中被引用,其中包含一个 json,就像这种格式 [1,2,3,4,5]
CREATE TABLE Photos (
id INTEGER PRIMARY KEY,
name TEXT,
persons JSONB
);
CREATE TABLE Person(
id INTEGER PRIMARY KEY,
name TEXT
);
我想做一个 LEFT JOIN 但我不知道怎么做。像这样
SELECT * FROM photos p LEFT JOIN person ON p.persons = person.id
知道怎么做吗?
取消嵌套数组然后你可以加入:
select ph.id, ph.name, pe.*
from photos ph
left join jsonb_array_elements(ph.persons) as p(pid) on true
left join person pe on pe.id = p.pid::int
第一个左联接将所有数组元素扩展为行。需要左连接,否则 persons
数组为空的照片将不会显示。然后你就可以加入对抗table.
的人了
我有一个 table“照片”,引用了照片中显示的人物列表。 这些人在名为“persons”的 JSONB 列中被引用,其中包含一个 json,就像这种格式 [1,2,3,4,5]
CREATE TABLE Photos (
id INTEGER PRIMARY KEY,
name TEXT,
persons JSONB
);
CREATE TABLE Person(
id INTEGER PRIMARY KEY,
name TEXT
);
我想做一个 LEFT JOIN 但我不知道怎么做。像这样
SELECT * FROM photos p LEFT JOIN person ON p.persons = person.id
知道怎么做吗?
取消嵌套数组然后你可以加入:
select ph.id, ph.name, pe.*
from photos ph
left join jsonb_array_elements(ph.persons) as p(pid) on true
left join person pe on pe.id = p.pid::int
第一个左联接将所有数组元素扩展为行。需要左连接,否则 persons
数组为空的照片将不会显示。然后你就可以加入对抗table.