mysql一對多查詢合併多的一方的數據。

有時候會有這樣一個需求,
查詢的一條記錄須要包含另外一個表的多條記錄,而且讓多條記錄成爲一個字段組成最終的一條記錄。比較難描述,看例子吧。code

建立一個產品表:產品

create table product(
    proId int(10),
    proName varchar(50)
   )

建立一個成分表:table

create table componen(
  comId int (10),
  proId int(10),
  comName varchar(50)
  )

案例需求:若是一個產品有多個成分,也就是一個產品表對應多個成分表,我想查出的結果,一條記錄包含產品 proId, ProName, ComName,的字段。select

思路:引用

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

實踐:查詢

1. select p.proId , p.proName from product p;
 2. SELECT group_concat( c.comName ) FROM componen WHERE componen.proId= 1
 3. SELECT
        p.proId AS "產品id", 
        p.proName AS "產品名稱",     
        (SELECT group_concat( c.comName ) FROM componen WHERE componen.proId
        = p.proId)AS "成分" 
     FROM
     product p;

*注意:第2步驟的語句和第三部引用第二部的語句有差異,那部分很重要的!
*若是要對合並的一方去重:嵌套DISTINCT便可tab

(SELECT group_concat( DISTINCT(c.comName) ) FROM componen WHERE componen.proId= p.proId)
相關文章
相關標籤/搜索