查询中 group_concat 上的 SQLITE 不需要的行为

Posted

技术标签:

【中文标题】查询中 group_concat 上的 SQLITE 不需要的行为【英文标题】:SQLITE unwanted behavior on group_concat in query 【发布时间】:2018-09-23 15:32:21 【问题描述】:

我有两张这样的表:

小提琴:click here

我的查询:

select
f.id,
'' || group_concat(f.key||','||ifnull(f.value,'NULL'), ',')||'' as 
key_value_pair_1,
'' || group_concat(r.key||','||ifnull(r.value,'NULL'), ',')||'' as 
key_value_pair_2
FROM items_functions as f
LEFT JOIN items_functions_2 as r ON f.id = r.id
GROUP BY f.id

但这会导致一种奇怪的行为。当您运行上述链接的小提琴时,您可以看到所有结果多次显示。

但我想要的是这样的结果:

id      key_value_pair_1                   key_value_pair_2
214808  16,662,17,808,33,1,60,2  16,662,17,808,33,1,60,2
214809  16,902,17,1103,33,1,60,2 16,902,17,1103,33,1,60,2
218965  19,808,21,662,33,1,60,8  19,808,21,662,33,1,60,8
218966  19,110321,902,33,1,60,8  19,1103,21,902,33,1,60,8
244574  16,999,18,999,54,174       16,999,18,999,54,174

我想我的查询必须调整。 :)

如果有人碰巧对此有解决方案,那就太棒了。

提前致谢!

最好的问候, 安德烈亚斯

【问题讨论】:

你应该在加入之前进行分组。 db-fiddle.com/f/4jXdhoe4McevzJoYZd24Nk/1 【参考方案1】:

我相信以下内容会满足您的要求:-

SELECT 
    p1.id, p1.kvp1, p2.kvp2
    FROM
    (
        SELECT 
            id,
            '' || group_concat(key||','||ifnull(value,'NULL'), ',')||'' 
            AS kvp1 
        FROM items_functions GROUP BY id
    ) 
    AS p1 
    JOIN 
            (
                SELECT 
                id,
                '' || group_concat(key||','||ifnull(value,'NULL'), ',')||''
                AS kvp2
                FROM items_functions_2 GROUP BY id
            ) 
    AS p2 
    ON p1.id = p2.id

产生:-

【讨论】:

以上是关于查询中 group_concat 上的 SQLITE 不需要的行为的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询结果拼接group_concat

mysql查询结果拼接group_concat

使用 MySQL 在不同字段上的多个 GROUP_CONCAT

多个表上的mysql group_concat

MariaDB:带有子查询的 group_concat 失败

mysql GROUP_CONCAT 长度被限制