MySQL объединяет множество строк - PullRequest
18 голосов
/ 01 марта 2011

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

продукт

  • productID
  • имя
  • цена

prod_cat

  • productID
  • CategoryId

Категория

  • categoryID
  • имя

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

product.productID category.categoryID product.name имя продукта

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

Ответы [ 2 ]

32 голосов
/ 01 марта 2011

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

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

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

0 голосов
/ 01 марта 2011

Вы можете использовать group_concat, если используете mySQL ...

см. Эту ветку.

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

(возможно дублирование)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...