1

我有 2 张桌子。这两个表具有一对多的关系。

表 - A

column1 column2
1       label1
2       label2

表 - B

Bcolumn1 Bcolumn2 Bcolumn3
1        value1   value4
1        value2   value5
2        value3   value6

结果表


column1 column2 json
1       label1  [{"Bcolumn":value1,"Bcolumn":value4},{"Bcolumn":value2,"Bcolumn":value5}]
2       label2  [{"Bcolumn":value3,"Bcolumn":value6}]

我想使用 TABLE - A 和 TABLE - B 获得 RESULT TABLE1。

我怎样才能得到这个结果?

谢谢你。

4

2 回答 2

1

使用 SQLite 的JSON1 扩展函数

SELECT a.column1, a.column2,
       json_group_array(json_object('Bcolumn', b.Bcolumn2, 'Bcolumn', b.Bcolumn3)) json
FROM tableA a INNER JOIN tableB b
ON b.Bcolumn1 = a.column1
GROUP BY a.column1;

请参阅演示

于 2022-02-16T21:12:01.383 回答
1

您在 sqlite 中寻找的是 group_concat() 函数。这很棘手,因为你有他想要在 2 个不同列中连接的值。基本上你可以做到以下几点

select
    a.column1
  , a.column2
  , '[{' || group_concat('"Bcolumn":' || b.bcolumn2 || '"Bcolumn":' || b.bcolumn3,'};{') || '}]' as json_output
from tablea a
inner join tableb b on
  a.column1 = b.bcolumn1
group by
    a.column1
  , a.column2
;

我使用 MSSQL 2019 和 string_agg() 测试了这个解决方案,但是从文档 ( https://www.sqlitetutorial.net/sqlite-group_concat/ ) 来看,这应该在 sqlite 中同样有效。

诀窍是使用 '};{' 作为分隔符,因为像这样,您只需要关心开始和结束括号,中间什么都不需要。

于 2022-02-16T21:13:24.203 回答