Left Join 两个表并按列分组到一个数组中

Left Join two tables & group by a column into an array

假设我们有两个表: websites

id label
1 my.website.com
2 new.app.gov.uk

domains

id websiteId domain
1 1 domain1.info
2 1 domain2.io

我可以离开加入他们吗,这样我可以得到类似的东西:

id label domains
1 my.website.com [domain1.info, domain2.io]
2 new.app.gov.uk []

STRING_AGG() 是一个聚合函数,它将多行字符串连接成一个字符串,由指定的分隔符分隔。它不会在结果字符串的末尾添加分隔符。

将此代码段用于 MySql:

SELECT t1.id,t1.label,IFNULL(CONCAT('[',GROUP_CONCAT(domain),']'),'[]')  as domains
 FROM websites t1 
 left join domains t2 
 on t1.id=t2.websiteId 
 group by t1.id,t1.label

输出:

id  label           domains
1   my.website.com  [domain1.info,domain2.io]
2   new.app.gov.uk  []

将此代码段用于 SQL-Server:

SELECT t1.id,t1.label,isnull('['+STRING_AGG(domain,',')+']','[]')
  FROM websites t1
  left join 
  domains t2
  on t1.id=t2.websiteId
  group by t1.id,t1.label

输出:

id  label           domains
1   my.website.com  [domain1.info,domain2.io]
2   new.app.gov.uk  []