MySQL查詢把多列返回結果集拼裝成一個字段

使用場景

mysql中有種可以通過join相關操作進行表與表之間的方式查詢不同結果集,但是在一對多的情況下,關鍵查詢的結果是多條的.例如:班級和學習的關係,我想很直觀的看到班級和學生的情況,列表顯示出班級的信息和班級的男生女生姓名,通過關聯查詢肯定是無法實現的.

解決方式

1首先我們瞭解上述相關使用場景之後,結合相關如下相關示例

單個列表中,需要顯示不同快遞公司的配送區域,相關表中存儲是的對應的地區id字段
2主表中記錄相關業務數據,然後關聯相地址表處理結果集,就可以得到我們需要的結果
原數據
這是原數據
最終需要的數據
這是我們要顯示的最終數據
執行的SQL如下

    SELECT 
    template.templete_id, template.is_transport, template.is_take_order, template.is_stop,
   	GROUP_CONCAT(region.region_name) province, template.first_heavy_price, 
   	template.first_heavy_cost, template.first_heavy_weight, 
   	template.continued_heavy_base, template.continued_heavy_price, 
   	template.continued_heavy_cost, template.weight_unit 
    FROM kd_up_freight_template template LEFT JOIN kd_up_express up
    ON template.up_express_id = up.up_express_id
    LEFT JOIN kd_region region ON FIND_IN_SET(region.region_id, template.province) 
    WHERE template.isdel = 0 
    GROUP BY template.templete_id

實現思路

可能業務場景不太一樣,最終的處理方式也不一樣
上面的SQL主要是通過主表中的地址ID集合關聯地址表
關聯方式通過FIND_IN_SET()函數處理
然後通過主表的ID進行分組
處理返回數據中通過GROUP_CONCAT()函數進行地址名稱處理

FIND_IN_SET()
功能:FIND_IN_SET函數是IN函數的升級版.功能類似.區別在於:如果是常量,則可以直接用IN, 否則要用FIND_IN_SET()函數
語法:MySQL中原型爲:FIND_IN_SET(str,strlist)。 假如字符串str 在由N 子鏈組成的字符串列表strlist 中,則返回值的範圍在 1 到 N 之間.
我們通過這個函數使主表和地址表關聯起來

GROUP_CONCAT()
功能:將group by產生的同一個分組中的值連接起來,返回一個字符串結果。
語法:group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
這裏我們直接不用做任何處理,直接連接地址名稱就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章