問題:
userid role_name role_id
1 管理員 1
1 編輯 2
1 超級管理員 3
2 普通會員 4
3 高階會員 5
4 null null
很簡單的資料,就是乙個使用者可能會對應多個角色,現在要求能用程式或者sql的方式使用者和角色逗號進行
分割。要求得到的資料如下:
userid role_name
1 管理員,編輯,超級管理員
2 普通會員
3 高階會員
4 null
解答:
用程式估計是再簡單不過了,資料庫的話如下:
mysql:直接呼叫函式group_contact完成
oracle10g:直接掉函式wm_concat完成
oracle9i:麻煩點,不過主要是通過sys_connect_by_path,這個函式能樹枝進行按指定字元連線,之所以產
生樹是因為這裡面用到了oracle的start with 遞迴成樹的
(1) mysql
group_concat函式是典型的字串連線函式,下面就為您介紹mysql group_concat的語法,希望對您學習
mysql group_concat函式有所幫助。
mysql group_concat函式
完整的語法如下:
group_concat([distinct] 要連線的字段 [order by asc/desc 排序字段] [separator '分隔符'])
我的理解就是: 後面的 group by xx 分好組之後, 然後將組內的資料連線起來,預設是逗號
測試sql語句:
insert into role values(1,1,'管理員',1);
insert into role values(2,1,'編輯',2);
insert into role values(3,1,'超級管理員',3);
insert into role values(4,2,'普通會員',4);
insert into role values(5,3,'高階會員',5);
例子: select userid,group_concat(role_name,';') from role group by userid;
result:
1 管理員;,編輯;,超級管理員;
2 普通會員;
3 高階會員;
擴充套件:
如果oralce\mysql本身有提供這字串連線聚合函式的話,樓主這個問題,其實很容易解決的,即按userid分組後,再將同組的role_name進行字串連線就over。
像oralce中wm_concat函式還不是oracle所有版本都有的,而像這種字元連線函式在實際程式設計中,是很常用的,select catstr(role_name) from user group by userid,而這邊這個 catstr聚合函式是自己在資料庫pl/sql實現的,具體實現方式可參見
這樣catstr就具有通用性了
也就是自定義函式
參見另外一篇: oracle中使用者自己建立與呼叫聚合函式
SQL 字串連線聚合函式
mysql 直接呼叫函式group concat完成 oracle10g 直接掉函式wm concat完成 oracle9i 麻煩點,不過主要是通過sys connect by path,這個函式能樹枝進行按指定字元連線,之所以產生樹是因為這裡面用到了oracle的start with 遞迴成樹的 ...
mysql字串連線函式
mysql中concat函式 使用方法 concat str1,str2,返回結果為連線引數產生的字串。如有任何乙個引數為null 則返回值為 null。注意 如果所有引數均為非二進位制字串,則結果為非二進位制字串。如果自變數中含有任一二進位制字串,則結果為乙個二進位制字串。乙個數字引數被轉化為與之...
SQL CONCAT 字串連線函式
有的時候,我們有需要將由不同字段獲得的資料串連在一起。每一種資料庫都有提供方法來達到這個目的 mysql concat oracle concat sql server concat 的語法如下 concat 字串1,字串2,字串3,將字串1 字串2 字串3,等字串連在一起。請注意,oracle的c...