一對多查詢,合並成一條數據
舉例:一個產品對應多個型號,把多個型號查詢出來顯示在一個字段下面。顯示出一條數據。
步驟:
1:創建產品表:
2:創建型號表:
思路:
- 先寫出不含產品型號的查詢語句,
- 然后將一個產品對應的多個成分合並成一個字段,
- 將合成的字段插入到一個語句中
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 數據類型過大問題
達到需求目的!!