select 查询一对多关系 table
select query for one-to-many relations table
我有2张桌子。这两个表是一对多的关系。
TABLE - A
column1 column2
1 label1
2 label2
TABLE - B
Bcolumn1 Bcolumn2 Bcolumn3
1 value1 value4
1 value2 value5
2 value3 value6
结果TABLE
column1 column2 json
1 label1 [{"Bcolumn":value1,"Bcolumn":value4},{"Bcolumn":value2,"Bcolumn":value5}]
2 label2 [{"Bcolumn":value3,"Bcolumn":value6}]
我想使用 TABLE - A 和 TABLE - B 获得结果 TABLE1。
我怎样才能得到这个结果?
谢谢。
使用 SQLite 的 JSON1 Extension functions:
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;
参见demo。
您在 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 中应该也能正常工作。
诀窍是使用'};{'作为分隔符,因为这样,您只需要关心左括号和右括号,而无需关心中间的内容。
我有2张桌子。这两个表是一对多的关系。
TABLE - A
column1 column2
1 label1
2 label2
TABLE - B
Bcolumn1 Bcolumn2 Bcolumn3
1 value1 value4
1 value2 value5
2 value3 value6
结果TABLE
column1 column2 json
1 label1 [{"Bcolumn":value1,"Bcolumn":value4},{"Bcolumn":value2,"Bcolumn":value5}]
2 label2 [{"Bcolumn":value3,"Bcolumn":value6}]
我想使用 TABLE - A 和 TABLE - B 获得结果 TABLE1。
我怎样才能得到这个结果?
谢谢。
使用 SQLite 的 JSON1 Extension functions:
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;
参见demo。
您在 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 中应该也能正常工作。
诀窍是使用'};{'作为分隔符,因为这样,您只需要关心左括号和右括号,而无需关心中间的内容。