Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON1跨多个表聚合SQLite查询_Sql_Sqlite_Sqlite Json1 - Fatal编程技术网

使用JSON1跨多个表聚合SQLite查询

使用JSON1跨多个表聚合SQLite查询,sql,sqlite,sqlite-json1,Sql,Sqlite,Sqlite 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(perso

我无法解决以下问题。前几天,我学习了如何使用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)
基于这些数据,我希望得到以下输出,即所有人的所有兴趣都聚合到一个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
不期望的输出是:

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

非常感谢您的帮助

要使用
json\u group\u数组
您必须按个人对行进行分组,除非您只需要一行包含所有结果

例1)

第一个版本将按个人为您提供1个json对象,因此结果将是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 ;