MySql concat除最后一条记录以外的字符

问题描述:

如何将字符连接到除最后一个结果之外的MySQL结果?MySql concat除最后一条记录以外的字符

所以:

friends 
------------- 
friend-a 
friend-b 
friend-c 
friend-d 
friend-e 

我现在做select concat(friends,',') from friends这实际上给了我一个,每个朋友的名字,但我不需要,最后一个。

由于尺寸限制,我无法在此使用group_concat。

试图输出

friend-a, 
friend-b, 
friend-c, 
friend-d, 
friend-e 
+0

为什么不使用'从friends'选择GROUP_CONCAT(朋友)? – 2014-10-06 16:39:39

+1

更改大小限制,请在查询前运行此设置'SET SESSION group_concat_max_len = 1000000;' – Mihai 2014-10-06 16:40:38

+0

由于大小限制。 – Norman 2014-10-06 16:40:43

如果你不想使用组concat(这将是最佳的方式来做到这一点..你可以删除最后一行,然后加入联合或使用您的字符串聚合函数返回最大。

(select concat(friends,',') as friend 
from friends 
WHERE friends <> (SELECT friends 
        from friends 
        order by friends DESC 
        limit 1) 
) 
UNION 
(SELECT friends 
from friends 
order by friends DESC 
limit 1) 

Fiddle Demo

一个更好的方法来做到这一点是像这样

SET @a := (SELECT MAX(friends) FROM friends); 
SELECT 
    CASE 
     WHEN friends <> @a 
     THEN concat(friends,',') 
     ELSE friends 
    END AS friends 
FROM friends 
GROUP BY friends 

Another Fiddle

然而,最简单的方法是使用group_concat,并增加会话的大小...不是在你的.cnf文件中,而是为了会话......这样你就不会像服务器那样影响存储那。

My Answer Here如何设置您的会话最大LEN和使用它

我猜你想要的输出,这样就可以在SQL的IN参数使用它呢?如果是的话,那么你可以使用下列内容: -

select * from `some_other_table` where `friends` in (select `friends` from `friends`); 

告诉我,如果我错了

我认为,如果最终的朋友值具有最高的ID,你可以尝试这样的事:

SELECT 
    CASE friends 
     WHEN (ID != (SELECT MAX(ID) FROM TABLE)) THEN friends 
     ELSE concat(friends,',') END 
FROM 
    FRIEND_TABLE 

干杯!