0

我想问一下如何在一个表中加入两个 JSONB 列。我目前正在阅读如何使用横向连接,但似乎无法使它们起作用。

我的表架构:

CREATE TABLE IF NOT EXISTS quiz(
    id SERIAL PRIMARY KEY,
    questions JSONB,
    answers JSONB
);

INSERT INTO quiz(questions, answers)
VALUES
('{"Q1": "Question 1",
"Q2": "Question 2",
"Q3": "Questiuon 3"}',


'{"Q1": "Answer 1",
"Q2": "Answer 2",
"Q3": "Answer 3"}');

预期输出:

------------ +-----------
| questions  |  answers |
-------------------------
| Question 1 | Answer 1 |
| Question 2 | Answer 2 |
| Question 3 | Answer 3 |
-------------+-----------

DB-小提琴

谢谢!

4

1 回答 1

1

演示:db<>小提琴

您可以使用 分别展开两个 JSON 列jsonb_each_text(),这将返回两列 (keyvalue),然后加入结果:

SELECT
    q.value as question,
    a.value as answer
FROM (
    SELECT
        questions.key,
        questions.value
    FROM quiz,
        jsonb_each_text(questions) as questions
) q 
JOIN (
    SELECT
        answers.key,
        answers.value
    FROM quiz,
        jsonb_each_text(answers) as answers
) a ON a.key = q.key

questions假设你在and中总是有相同的键answers,你可以这样做:

演示:db<>小提琴

SELECT
    questions ->> key,
    answers ->> key
FROM quiz,
    jsonb_object_keys(questions) as key

从一列中检索keys并使用它们从两列中获取值。

于 2021-02-18T15:18:23.130 回答