一對多查詢,合併成一條數據sql
舉例:一個產品對應多個型號,把多個型號查詢出來顯示在一個字段下面。顯示出一條數據。函數
步驟:spa
1:建立產品表:3d
2:建立型號表:code
思路:blog
- 先寫出不含產品型號的查詢語句,
- 而後將一個產品對應的多個成分合併成一個字段,
- 將合成的字段插入到一個語句中
sql語句:排序
SELECT p.id AS '產品id', p.product_name AS '產品名字', p.type AS '產品類型', (SELECT group_concat(pm .model) FROM product_model pm WHERE pm.product_id=p.id) AS '產品型號' FROM product p
注意:這裏就用到一個函數:group_concat();產品
*若是要對合並的一方去重:嵌套DISTINCT便可:class
(SELECT group_concat( DISTINCT(c.comName) ) FROM componen WHERE componen.proId= p.proId)
查詢結果:test
完整語法以下
group_concat([DISTINCT] 要鏈接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
SELECT * FROM testgroup
表結構與數據如上
如今的需求就是每一個id爲一行 在前臺每行顯示該id全部分數
group_concat 上場!!!
SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id
能夠看到 根據id 分紅了三行 而且分數默認用 逗號 分割 可是有每一個id有重複數據 接下來去重
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
最後能夠設置分隔符
SELECT id,GROUP_CONCAT(score SEPARATOR ';') FROM testgroup GROUP BY id
這樣咱們的數據就根據id 不一樣分隔符 放在了一行 前臺能夠根絕對應的分隔符 對score 字段進行分割 可是有可能存在score 數據類型過大問題
達到需求目的!!