Mysql

如何為一條記錄顯示多個名稱但不重複記錄?

  • June 28, 2015

我有一個這樣的數據庫結構:

Car
- id   
- carname
- image
- category
- status

Parts
- partid
- partname

CarParts
- carpartid
- carid(fk)
- partid(fk)
- amountid(fk)

Category
- id
- categoryname

Amount
- amountid
- amountvalue

現在這就是我正在做的事情:

SELECT * FROM carparts
INNER JOIN car on carparts.carpartid = car.id 

INNER JOIN parts on parts.partid = carparts.carpartid

INNER JOIN amount on amount.amountid = carparts.amountid where status = 1

當 carparts 表中有多個 carpart 時,這將返回重複記錄。如何將 carparts.id 和 car.id 組合到一行,但該記錄仍有多個零件名?

所以必鬚髮生的是,每輛車可能有多個汽車零件,但是當查詢執行時,如果一條記錄有多個汽車零件,它會顯示具有不同零件名稱的重複記錄,有沒有辦法讓一輛汽車具有許多零件名稱那個記錄?

我是否必須更改數據庫結構或查詢才能做到這一點?

你的結構看起來不錯。除了您可以將金額合併到零件表之外。因為每個部分都與價格嚴格相關。

此外,您將有重複行的唯一原因是您的任何維度表不遵循嚴格的主要約束。

Car
- id (pk)
- carname
- image
- category
- status

Parts
- partid (pk)
- partname
- amountValue

CarParts
- carpartid (pk)
- carid(fk)
- partid(fk)
- amountid(fk)

Category
- id (pk )
- categoryname

我認為這*僅用於展示目的。

您可以使用 GROUP_CONCAT 將多行中的字元串聚合為一個字元串。在下面的範例中,我只包含汽車名稱,您可能需要更多資訊:

SELECT c.carname
    , GROUP_CONCAT(p.partname)
FROM carparts as cp
JOIN car as c 
   ON cp.carid = c.id 
JOIN parts as p 
   ON p.partid = cp.carpartid
JOIN amount as a 
   ON a.amountid = cp.amountid 
WHERE c.status = 1;

引用自:https://dba.stackexchange.com/questions/105327