2014-10-06 43 views
0

如何將字符連接到除最後一個結果之外的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

回答

2

如果你不想使用組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和使用它

0

我猜你想要的輸出,這樣就可以在SQL的IN參數使用它呢?如果是的話,那麼你可以使用下列內容: -

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

告訴我,如果我錯了

0

我認爲,如果最終的朋友值具有最高的ID,你可以嘗試這樣的事:

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

乾杯!

相關問題