一对多查询,合并成一条数据
一對多查詢,合并成一條數(shù)據(jù)
? ?舉例:一個產(chǎn)品對應(yīng)多個型號,把多個型號查詢出來顯示在一個字段下面。顯示出一條數(shù)據(jù)。
?
步驟:
? 1:創(chuàng)建產(chǎn)品表:
? ?2:創(chuàng)建型號表:
?
思路:
?
?
sql語句:
SELECT p.id AS '產(chǎn)品id',p.product_name AS '產(chǎn)品名字',p.type AS '產(chǎn)品類型', (SELECT group_concat(pm .model) FROM product_model pm WHERE pm.product_id=p.id) AS '產(chǎn)品型號'FROM product p?
注意:這里就用到一個函數(shù):group_concat();
*如果要對合并的一方去重:嵌套DISTINCT即可:
(SELECT group_concat( DISTINCT(c.comName) ) FROM componen WHERE componen.proId= p.proId)?
查詢結(jié)果:
?
?
?
?
?
?
完整語法如下
group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
?
?
SELECT * FROM testgroup?
表結(jié)構(gòu)與數(shù)據(jù)如上
現(xiàn)在的需求就是每個id為一行 在前臺每行顯示該id所有分?jǐn)?shù)
?
group_concat 上場!!!
?
SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id?
可以看到 根據(jù)id 分成了三行 并且分?jǐn)?shù)默認(rèn)用 逗號 分割 但是有每個id有重復(fù)數(shù)據(jù) 接下來去重
?
?
SELECT id,GROUP_CONCAT(DISTINCT score) FROM testgroup GROUP BY id?
排序
?
SELECT id,GROUP_CONCAT(score ORDER BY score DESC) FROM testgroup GROUP BY id?
最后可以設(shè)置分隔符
?
SELECT id,GROUP_CONCAT(score SEPARATOR ';') FROM testgroup GROUP BY id?
?
這樣我們的數(shù)據(jù)就根據(jù)id 不同分隔符 放在了一行 前臺可以根絕對應(yīng)的分隔符 對score 字段進(jìn)行分割 但是有可能存在score 數(shù)據(jù)類型過大問題?
達(dá)到需求目的!!
?
轉(zhuǎn)載于:https://www.cnblogs.com/dw3306/p/9638301.html
總結(jié)
以上是生活随笔為你收集整理的一对多查询,合并成一条数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闪念-许久未来一切没变
- 下一篇: Palette优化界面色彩搭配