mysql 連表分組 多個欄位用逗號隔開

2021-09-28 15:52:32 字數 1567 閱讀 1420

select *, group_concat(plate_tag.plate_id) from `tag` left join plate_tag on plate_tag.tag_id = tag.id where `tag`.`deleted_at` is null and `plate_tag`.`deleted_at` is null group by tag.id;
**:僅做個人備份,瀏覽請看原文)

group_concat()是mysql資料庫提供的乙個函式,通常跟group by一起用,並把查詢的字段逗號分隔開,只支援字元型別的字段,整數型須要特殊寫法。

下面是一些使用注意事項:

1.int欄位的連線陷阱

當你用group_concat的時候請注意,連線起來的字段如果是int型,一定要轉換成char再拼起來,

否則在你執行後(executescalar或者其它任何執行sql返回結果的方法)返回的將不是乙個逗號隔開的串,

而是byte。

該問題當你在sqlyog等一些工具中是體現不出來的,所以很難發現。

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

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,設定就會生效。

請注意,這種方式只是臨時的,如要長久的修改,則需要修改mysql的配置節。

到my.cnf的mysqld節點下加上group_concat_max_len =99999……

重啟mysql。

MYSQL 分組 group by 多個字段

sql語法的規定,用了group by,則select之後的字段除聚合函式外都必須出現在group by中,你可以少於group by中的字段,但不能包含group by中沒有的字段 select subject,semester,count from subject selection group...

對多個字段分組 拆分字段步驟詳解

拆分字段步驟用於根據指定的分隔符將源字段 字串型別 拆分為多個欄位的場景。步驟配置資訊如下圖 圖1 拆分字段步驟配置資訊 下文詳細解 釋各控制項的含義 1 轉換步驟名稱 步驟的名稱,在單一的轉換中,名稱必須唯一。2 需要拆分的字段 下拉框選擇輸入步驟中包含的字段,作為拆分的目標。3 分隔符 根據需要...

mysql關聯表更改表多個字段值

關聯表更改某乙個字段值 更改部分資料,外層where條件控制更改記錄的數量begin update sturgeon summary s set s.set date select set date from sturgeon set pay p where s.set no p.set no wh...