MySQL оставил соединение с несколькими строками справа, как объединиться с одной строкой для каждого слева (с полем, которое я хочу из таблицы справа)?

У меня есть две таблицы MySQL, продукты и штрих-коды. Продукт может иметь несколько штрих-кодов, поэтому я выделил его в свою таблицу.

Это то, что я пробовал (используя CodeIgnighter Active Record, но я выписал здесь запрос, то есть, если есть опечатка, она может отсутствовать в моем реальном запросе):

SELECT
    products.id,
    products.snipe_price,
    group_concat(barcodes.barcode) as barcodes
FROM products
LEFT JOIN barcodes on barcodes.product_id = products.id

Но это просто возвращает одну строку со всеми штрих-кодами для каждого продукта в concat, как я могу получить одну строку для каждого продукта со штрих-кодами продуктов?

Я бы предпочел не разбивать его на части, но если нет решения с помощью join пожалуйста, дайте мне знать.

Ответ 1

Вам понадобится group by:

SELECT products.id, products.snipe_price, group_concat(barcodes.barcode) as barcodes
FROM products LEFT JOIN
     barcodes
     on barcodes.product_id = products.id
group by products.id;

Без group by MySQL интерпретирует весь запрос как запрос агрегации для суммирования всех данных (из-за наличия group_concat(), функции агрегации). Следовательно, он возвращает только одну строку, суммированную по всем данным.