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()
, функции агрегации). Следовательно, он возвращает только одну строку, суммированную по всем данным.