我有用戶組分配表,如:將多個行連接成一個單元格的SQL命令?
ID----UserName------Group
01 johnsmith admin
02 sarahwilles admin
03 johnsmith testuser
我想顯示爲:
UserName-------Groups
johnsmith admin, testuser
sarahwilles admin
通過SQL這可能嗎?
我有用戶組分配表,如:將多個行連接成一個單元格的SQL命令?
ID----UserName------Group
01 johnsmith admin
02 sarahwilles admin
03 johnsmith testuser
我想顯示爲:
UserName-------Groups
johnsmith admin, testuser
sarahwilles admin
通過SQL這可能嗎?
不是標準的SQL,但MySQL **提供了GROUP_CONCAT
,它將完全按照您的要求進行操作。
SELECT foo, GROUP_CONCAT(DISTINCT bar ORDER BY bar) AS bars
FROM foo_table
LEFT JOIN bar_table ON bar_table.foo_id = foo_table.foo_id
**假設沒關係,因爲你已經標記爲mysql
的問題,這與標準SQL的一部分,因爲它是如此開放式的,這是一個困難的方式來解決問題這提供了一個可預測的答案。無限數量的行基本上是正常的,並且是SQL的預期部分,但無限長度的文本字符串不是。 group_concat()存在於mysql中,但對我來說,它通常是我的需求幾乎沒有想到的。它唯一能做的就是截斷結果,如果它超過了系統限制group_concat_max_len。因此,它仍然需要額外的代碼來計算「真實」結果的長度,並查看它是否比group_concat_max_len更長。當然,你可能有一些其他的限制,保證它不會成爲一個問題,但更可能的是,它僅僅是不可能的,而不是不可能有超過group_concat_max_len的問題。此外,這意味着您必須在代碼中驗證group_concat_max_len的值,因爲它是可配置的,並可能在稍後的日期更改。
在幾乎所有我希望能夠使用group_concat()的情況下,我最終發現我最好寫一些可以與行中所有值一起工作的東西,而不是將它們連接成一個字符串。但是,如果你只是在mysql>提示符下查找數據,它可能非常方便。
SELECT DISTINCT用戶名, 集團FROM table_name的
會嘗試這樣的:
SELECT UserName, group_concat(group) allGroup
FROM tableAssignment
GROUP BY UserName
希望它能幫助。
歡迎使用stackoverflow。請在發佈之前嘗試閱讀以前的答案。 'group_concat'已在兩年前被建議(並被接受);) – Leigh