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


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

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

 

步驟:

  1:創建產品表:

   2:創建型號表:


 

思路:

  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即可:

(SELECT group_concat( DISTINCT(c.comName) ) FROM componen WHERE componen.proId= p.proId)

 

查詢結果:

 

 

 


 

 

 

完整語法如下

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

達到需求目的!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM