【发布时间】:2021-12-12 17:31:24
【问题描述】:
我有这个 SQL
CREATE TABLE product(id SERIAL PRIMARY KEY, name text, categories JSONB);
INSERT INTO product(name, categories) VALUES
('prouct1', '{"ids":[4,5]}'),
('prouct2', '{"ids":[5,6]}'),
('prouct3', '{"ids":[7]}');
CREATE TABLE category(id bigint, rootid bigint);
INSERT INTO category(id, rootid) VALUES
(1, null),
(2, null),
(3, null),
(4, 1),
(5, 2),
(6, 1),
(7, 3);
我想使用 TypeORM 进行此查询。但我不知道如何使 jsonb_array_elements_text(b.categories->'ids') pc(categoryid) ON TRUE 成为 TypeORM 的一部分。
SELECT p.id, p.name, p.categories
FROM product p
INNER JOIN jsonb_array_elements_text(b.categories->'ids') pc(categoryid) ON TRUE
INNER JOIN category c ON pc.categoryid = c.categoryid AND c.rootid = 1000;
或者,我正在尝试另一个查询。但是当我输入jsonb_array_elements_text(categories->'ids') 时它太慢了。为什么会这样?
SELECT p.id, p.name, p.categories
FROM product p
INNER JOIN (SELECT id, jsonb_array_elements_text(categories->'ids') categoryid FROM product) pc ON p.id = pc.id
INNER JOIN category c ON pc.categoryid = c.categoryid AND c.rootid = 1000;
【问题讨论】:
标签: postgresql join typeorm