如何在逗号分隔字符串字段上汇总两个表?

发布于 2025-02-07 20:50:12 字数 1181 浏览 3 评论 0原文

在一个表中,我有一个由逗号分隔的多个值的列。在第二个中,具有ID名称的列。我需要得到用斜线隔开的名字。

表1:

ID1value2
1ABCD1,2,3EFGH
2IJKL1,4,6MNOP

Table2:

ID名称
11AB
22CD
2 CD 2 CD 3 3 33 3
33 3
3 35ij
66kl
SELECT
    a.*,  
    GROUP_CONCAT(b.name,'/') groupedName
FROM
    table1 a
LEFT JOIN
    table2 b ON b.id IN (a.ids)
WHERE
    a.id = 1

结果:

IDvalue1IDSIDS值2value2 groupedname
1 ABCD 1 ABCD 1ABCD1 ABCD 1,2 ,3EFGH1AB/2CD/3EF

In one table I have a column with multiple values separated by a comma. In the second, columns with id and name. I need to get names separated by a slash.

Table1:

idvalue1idsvalue2
1abcd1,2,3efgh
2ijkl1,4,6mnop

Table2:

idname
11AB
22CD
33EF
44GH
55IJ
66KL
SELECT
    a.*,  
    GROUP_CONCAT(b.name,'/') groupedName
FROM
    table1 a
LEFT JOIN
    table2 b ON b.id IN (a.ids)
WHERE
    a.id = 1

Result:

idvalue1idsvalue2groupedName
1abcd1,2,3efgh1AB/2CD/3EF

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘香 2025-02-14 20:50:13

假设IDtable1的主要键,请在 on 中使用operator one 等条款:

SELECT t1.*,  
       GROUP_CONCAT(t2.name, '/') groupedName
FROM table1 t1 LEFT JOIN table2 t2 
ON ',' || t1.ids || ',' LIKE '%,' || t2.id || ',%'
GROUP BY t1.id;

请参阅

Assuming that id is the primary key of table1, use the operator LIKE in the ON clause like this:

SELECT t1.*,  
       GROUP_CONCAT(t2.name, '/') groupedName
FROM table1 t1 LEFT JOIN table2 t2 
ON ',' || t1.ids || ',' LIKE '%,' || t2.id || ',%'
GROUP BY t1.id;

See the demo.

小苏打饼 2025-02-14 20:50:13

鉴于您的“ table1.ids ”具有varchar(n)类型,您可以使用喜欢功能,以适应JOIN 在两个表之间,然后应用group_concat聚合函数:

SELECT t1.id,
       t1.value1,
       t1.ids,
       t1.value2,
       GROUP_CONCAT(t2.name, '/') AS groupedName 
FROM       table1 t1
INNER JOIN table2 t2
        ON t1.ids LIKE t2.id || ',%'
        OR t1.ids LIKE  '%,' || t2.id || ',%'
        OR t1.ids LIKE           '%,' || t2.id
        OR t1.ids = t2.ids
GROUP BY t1.id,
         t1.value1,
         t1.ids,
         t1.value2

检查demo 此处

Given that your "Table1.ids" has VARCHAR(n) type, you can use the LIKE function for the matching condition on the JOIN between the two tables, only then apply the GROUP_CONCAT aggregation function:

SELECT t1.id,
       t1.value1,
       t1.ids,
       t1.value2,
       GROUP_CONCAT(t2.name, '/') AS groupedName 
FROM       table1 t1
INNER JOIN table2 t2
        ON t1.ids LIKE t2.id || ',%'
        OR t1.ids LIKE  '%,' || t2.id || ',%'
        OR t1.ids LIKE           '%,' || t2.id
        OR t1.ids = t2.ids
GROUP BY t1.id,
         t1.value1,
         t1.ids,
         t1.value2

Check the demo here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文