一對多查詢,合併成一條數據

一對多查詢,合併成一條數據sql

   舉例:一個產品對應多個型號,把多個型號查詢出來顯示在一個字段下面。顯示出一條數據。函數

 

步驟:spa

  1:建立產品表:3d

   2:建立型號表:code


 

思路:blog

  1. 先寫出不含產品型號的查詢語句,
  2. 而後將一個產品對應的多個成分合併成一個字段,
  3. 將合成的字段插入到一個語句中

 

 

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 數據類型過大問題 

達到需求目的!!

相關文章
相關標籤/搜索