Подтвердить что ты не робот

MySQL объединяет много разных строк

У меня есть 3 таблицы, которые я хочу объединить, подробнее см. ниже:

продукт

  • productID
  • name
  • цена

prod_cat

  • productID
  • CategoryId

категория

  • categoryID
  • имя

присоединился

product.productID category.categoryID product.name product.price category.name(каждый, хотя продукт может принадлежать более чем одной категории)

Что я хочу сделать, так это получить каждый продукт с категориями, которые относятся к ним в одном запросе. Как мне это узнать?

4b9b3361

Ответ 1

Вам нужно два соединения:

SELECT
    product.productID,
    category.categoryID,
    product.name,
    product.price,
    category.name
FROM product
JOIN product_cat ON product.productID = product_cat.productID
JOIN category ON category.categoryID = product_cat.categoryID

Если продукт может быть без каких-либо категорий, и вы все равно хотите его вернуть, измените JOIN на LEFT JOIN в обоих местах.

Альтернативный подход:

SELECT
    product.productID,
    product.name,
    product.price,
    GROUP_CONCAT(category.name)
FROM product
JOIN product_cat ON product.productID = product_cat.productID
JOIN category ON category.categoryID = product_cat.categoryID
GROUP BY product.productID

Однако лучше всего использовать два запроса вместо того, чтобы поместить несколько значений в одну ячейку.