在 SQLite 上获取具有 JOINed 值的数组
Get array with JOINed values on SQLite
我在 NodeJS 上使用 SQLite3 并且我在内存中有一个数据库用于像这样的测试目的,其中 table1 和 table2 之间存在关系。表 2 中的 fk
字段是表 1 中的 id
。
表 1
id
value1
value2
1
v1_t1
v2_t1
表 2
id
value1
fk
1
v1_t2
1
2
v2_t2
1
当我运行这个查询时:
SELECT * from table1 t1 INNER JOIN table2 t2 ON t2.fk=t1.id WHERE t1.id=1;
结果是
[
{
id: 1,
value1: v1_t2,
fk:1
},
{
id: 2,
value1: v2_t2,
fk:1
}
]
但我想要这样的东西:
[
{
fk: 1,
value1: "v1_t1",
value2: "v2_t1",
result: [
{
id: 1,
value1: "v1_t2",
fk: 1
},
{
id: 2,
value1: "v2_t2",
fk: 1
}
]
}
]
这可以使用 SQLite
还是我应该使用非关系数据库?
提前致谢。
您可以使用 SQLite 的 JSON1 Extension 函数:
SELECT json_object(
'fk', t2.fk,
'value1', t1.value1,
'value2', t1.value2,
'result',
json_group_array(json_object('id', t2.id, 'value1', t2.value1, 'fk', t2.fk))
) col
FROM table1 t1 INNER JOIN table2 t2
ON t2.fk = t1.id
WHERE t1.id = 1;
参见demo。
我在 NodeJS 上使用 SQLite3 并且我在内存中有一个数据库用于像这样的测试目的,其中 table1 和 table2 之间存在关系。表 2 中的 fk
字段是表 1 中的 id
。
表 1
id | value1 | value2 |
---|---|---|
1 | v1_t1 | v2_t1 |
表 2
id | value1 | fk |
---|---|---|
1 | v1_t2 | 1 |
2 | v2_t2 | 1 |
当我运行这个查询时:
SELECT * from table1 t1 INNER JOIN table2 t2 ON t2.fk=t1.id WHERE t1.id=1;
结果是
[
{
id: 1,
value1: v1_t2,
fk:1
},
{
id: 2,
value1: v2_t2,
fk:1
}
]
但我想要这样的东西:
[
{
fk: 1,
value1: "v1_t1",
value2: "v2_t1",
result: [
{
id: 1,
value1: "v1_t2",
fk: 1
},
{
id: 2,
value1: "v2_t2",
fk: 1
}
]
}
]
这可以使用 SQLite
还是我应该使用非关系数据库?
提前致谢。
您可以使用 SQLite 的 JSON1 Extension 函数:
SELECT json_object(
'fk', t2.fk,
'value1', t1.value1,
'value2', t1.value2,
'result',
json_group_array(json_object('id', t2.id, 'value1', t2.value1, 'fk', t2.fk))
) col
FROM table1 t1 INNER JOIN table2 t2
ON t2.fk = t1.id
WHERE t1.id = 1;
参见demo。