我有這個 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;
uj5u.com熱心網友回復:
在PostgreSQL有額外的索引型別GIN的JSON和JSONB型別。為獲得最佳性能,您必須為此 JSON 欄位創建索引。例如:
CREATE INDEX product_category_json_index ON product USING gin (categories jsonb_path_ops);
我為你寫了一個替代查詢:
select main.*, cat.* from
(
select p.*, jsonb_array_elements((categories->'ids'))::integer as category_id
from product p
) main
inner join examples.category cat on cat.id = main.category_id;
我想獲得這些表的更詳細資訊,如果您知道,請向我解釋兩個表(product和category)中有多少記錄我想插入到我的本地表樣本資料(相同計數)以進行測驗和分析
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/353726.html
標籤:PostgreSQL 加入 打字机
下一篇:單品頁面中的onclick模態框
