I've got repeating records with different 'manufacturer'
fields. I'm trying to GROUP BY i.stocknumber
but that only removes a record without collecting the other manufacturer result.
Some records have a NULL
manufacturer field, and I've tried using GROUP_CONCAT
in the subquery to elide the differing results for "manufacturer".
Here's my current query:
SELECT i.id,i.stocknumber,m.manufacturer
FROM inventory i
INNER JOIN makes mk on i.make = mk.id
INNER JOIN models md on i.model = md.id
INNER JOIN classes cl on i.class = cl.id
LEFT JOIN (
SELECT idm.id, idm.inventory_id, dm.manufacturer AS 'manufacturer'
FROM display_manufacturers dm
INNER JOIN inventory_display_manufacturers idm ON dm.id = idm.display_manufacturer_id
) m ON i.id = m.inventory_id
-- GROUP BY i.stocknumber
ORDER BY i.stocknumber
The result I get is:
Any thoughts on grouping the repeated records by concatenating the manufacturer
field?
(NOTE: I already tried GROUP_CONCAT
on the subquery)
DESIRED RESULT:
id | stocknumber | manufacturer
----------------------------------
946 | 011A | NULL
907 | 1001 | Sports Coach, Coachmen
1032 | 1001x | Sports Coach
etc....
Are you looking for this?
SELECT i.id, i.stocknumber, group_concat(distinct m.manufacturer) as manufacturers
. . .
GROUP BY i.stocknumber
EDIT:
This version explicitly uses your query as a subquery. It should not put all manufacturers on the same row:
select stocknumber, group_concat(distinct manufacturer) as manufacturers
from (SELECT i.id,i.stocknumber,m.manufacturer
FROM inventory i
INNER JOIN makes mk on i.make = mk.id
INNER JOIN models md on i.model = md.id
INNER JOIN classes cl on i.class = cl.id
LEFT JOIN (
SELECT idm.id, idm.inventory_id, dm.manufacturer AS 'manufacturer'
FROM display_manufacturers dm
INNER JOIN inventory_display_manufacturers idm ON dm.id = idm.display_manufacturer_id
) m ON i.id = m.inventory_id
) t
GROUP BY stocknumber ;