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 []
假设我们有两个表:
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 []