簡體   English   中英

使用 JSON1 跨多個表聚合 SQLite 查詢

[英]Aggregate SQLite query across multiple tables using JSON1

我無法解決以下問題。 前幾天我學習了如何使用 JSON1 系列函數,但這一次似乎更像是一個 SQL 問題。

這是我的數據庫設置:

CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE)
CREATE TABLE interests(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE)
CREATE TABLE persons_interests(person INTEGER, interest INTEGER, FOREIGN KEY(person) REFERENCES persons(id), FOREIGN KEY(interest) REFERENCES interests(id))

INSERT INTO persons(name) VALUES('John')
INSERT INTO persons(name) VALUES('Jane')

INSERT INTO interests(name) VALUES('Cooking')
INSERT INTO interests(name) VALUES('Gardening')
INSERT INTO interests(name) VALUES('Relaxing')

INSERT INTO persons_interests VALUES(1, 1)
INSERT INTO persons_interests VALUES(1, 2)
INSERT INTO persons_interests VALUES(2, 3)

根據這些數據,我想得到以下 output,這是所有人的所有興趣,聚合到一個 JSON 數組中:

[{name: John, interests:[{name: Cooking},{name: Gardening}]}, {name: Jane, interests:[{name: Relaxing}]}]

現在以下是我嘗試做的。 不用說,這並沒有給我想要的東西:

SELECT p.name, json_object('interests', json_group_array(json_object('name', i.name))) interests
FROM persons p, interests i
JOIN persons_interests pi ON pi.person = p.id AND pi.interest = i.id

不需要的 output 是:

John|{"interests":[{"name":"Cooking"},{"name":"Gardening"},{"name":"Relaxing"}]}

非常感謝任何幫助!

對於使用json_group_array ,您必須按人對行進行分組,除非您只希望一行包含所有結果。

示例 1)

第一個版本將按人為您提供 1 json object,因此結果將為 N 人的 N 行:

SELECT json_object( 'name ',
                    p.name, 
                    'interests', 
                    json_group_array(json_object('name', i.name))) jsobjects
FROM persons p, interests i
JOIN persons_interests pi ON pi.person = p.id AND pi.interest = i.id
group by p.id ;

例 2)

第二個版本將返回 1 個包含所有人的大 json 數組,但您只獲取一行。

SELECT json_group_array(jsobjects) 
FROM (

    SELECT json_object( 'name ',
                        p.name, 
                        'interests', 
                        json_group_array(json_object('name', i.name))) jsobjects
    FROM persons p, interests i
    JOIN persons_interests pi ON pi.person = p.id AND pi.interest = i.id
    group by p.id 
) jo ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM