mysql group_concat合併行用法和問題

還有分隔符還能夠自定義,默認是以「,」做爲分隔符,若要改成「|||」,則使用SEPARATOR來指定,mysql

例如:sql

mysql> SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;函數

除此以外,還能夠對這個組的值來進行排序再鏈接成字符串,例如按courses_id降序來排:工具

mysql> SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;排序

UPDATE table1 a, table2 b
SET a.major = (SELECT GROUP_CONCAT(major ORDER BY degree DESC) FROM table2 WHERE aid=a.bid AND major <> 0 ) WHERE a.aid=b.bidip

UPDATE table1 a, table2 b
SET a.name = (SELECT name FROM table2 WHERE bid=a.aid ORDER BY degree DESC LIMIT 0,1) WHERE a.aid=b.bid AND a.name =''字符串

1.int字段的鏈接陷阱 當你用group_concat的時候請注意,鏈接起來的字段若是是int型,必定要轉換成char再拼起來, 不然在你執行後(ExecuteScalar或者其它任何執行SQL返回結果的方法)返回的將不是一個逗號隔開的串, 而是byte[]。 該問題當你在SQLyog等一些工具中是體現不出來的,因此很難發現。table

select group_concat(ipaddress) from t_ip 返回逗號隔開的串ast

select group_concat(id) from t_ip 返回byte[]變量

select group_concat(CAST(id as char)) from t_dep 返回逗號隔開的串

select group_concat(Convert(id , char)) from t_dep 返回逗號隔開的串

附Cast,convert的用法:

CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)

CAST() 和CONVERT() 函數可用來獲取一個類型的值,併產生另外一個類型的值。 這個類型 能夠是如下值其中的 一個: BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL SIGNED [INTEGER] TIME UNSIGNED [INTEGER]

2.長度陷阱 用group_concat鏈接字段的時候是有長度限制的,並非有多少連多少。但你能夠設置一下。

使用group_concat_max_len系統變量,你能夠設置容許的最大長度。

程序中進行這項操做的語法以下,其中 val 是一個無符號整數: SET [SESSION | GLOBAL] group_concat_max_len = val;

若已經設置了最大長度, 則結果被截至這個最大長度。 在SQLyog中執行 SET GLOBAL group_concat_max_len = 10 後,

從新打開SQLyog,設置就會生效。

相關文章
相關標籤/搜索