【发布时间】:2020-03-17 18:41:15
【问题描述】:
我有一个包含这些表的 PostgreSQL 11 数据库:
CREATE TABLE stats (
id integer NOT NULL,
uid integer NOT NULL,
date date NOT NULL,
data jsonb DEFAULT '[]'::json NOT NULL
);
INSERT INTO stats(id, uid, date, data) VALUES
(1, 1, '2020-10-01', '{"somerandomhash":{"source":"thesource"}}');
CREATE TABLE links(
id integer NOT NULL,
uuid uuid NOT NULL,
path text NOT NULL
);
INSERT INTO links(id, uuid, path) VALUES
(1, 'acbd18db-4cc2-f85c-edef-654fccc4a4d8', 'thesource');
我的目标是使用stats 表中的data 创建一个新表reports,但使用links 表中的新键。它看起来像这样:
CREATE TABLE reports(
id integer NOT NULL,
uid integer NOT NULL,
date date NOT NULL,
data jsonb DEFAULT '[]'::json NOT NULL
);
INSERT INTO reports(id, uid, date, data) VALUES
(1, 1, 2020-10-01, {"uuid":{"source":"thesource"});
为此,我尝试左加入表links 以检索uuid 列值 - 没有运气:
SELECT s.uid, s.date, s.data->jsonb_object_keys(data)->>'source' as path, s.data->jsonb_object_keys(data) as data, l.uuid
FROM stats s LEFT JOIN links l ON s.data->jsonb_object_keys(data)->>'source' = l.path
我尝试在左连接中使用 s.data->jsonb_object_keys(data)->>'source' 的结果,但报错:
ERROR: set-returning functions are not allowed in JOIN conditions
我尝试使用LATERAL,但结果仍然无效。
如何使这项工作?
【问题讨论】:
-
这样的任何问题的工具:Postgres 版本、表定义(
CREATE TABLE脚本)、示例数据、所需结果。 -
你是对的。我编辑了我的问题。
-
我冒昧地用可行的方法修复了您的设置。希望我猜对了……
标签: sql postgresql left-join jsonb set-returning-functions