SQL для объединения одной таблицы в другую таблицу несколько раз? (Отображение продуктов по категориям)
Допустим, у меня естьProduct
, Category
, а такжеProduct_To_Category
Таблица. Продукт может быть в нескольких категориях.
Product Category Product_to_category ID | NAME ID | Name Prod_id | Cat_id ===================== ============ =================== 1| Rose 1| Flowers 1| 1 2| Chocolate Bar 2| Food 2| 2 3| Chocolate Flower 3| 1 3| 2
Я хотел бы запрос SQL, который дает мне такой результат, как
ProductName | Category_1 | Category_2 | Category_3 ======================================================= Rose | Flowers | | Chocolate Flower | Flowers | Food |
и т.п.
Лучший способ добиться этого - объединить кучу запросов; один запрос для каждого ожидаемого количества категорий для данного продукта.
select p.name, cat1.name, cat2.name
from
product p,
(select * from category c, producttocategory pc where pc.category_id = c.id) cat1,
(select * from category c, producttocategory pc where pc.category_id = c.id) cat2
where p.id = cat1.id
and p.id = cat2.id
and cat1.id != cat2.id
union all
select p.name, cat1.name, null
from
product p,
(select * from category c, producttocategory pc where pc.category_id = c.id) cat1
where p.id = cat1.id
and not exists (select 1 from producttocategory pc where pc.product_id = p.id and pc.category_id != cat1.id)
Есть несколько проблем с этим.
Во-первых, я должен повторить этот союз для каждой ожидаемой категории; если товар может быть в 8 категориях, мне нужно 8 запросов.Во-вторых, категории не помещаются в одинаковые столбцы. Например, иногда продукт может иметь «Еда, Цветы», а другой раз - «Цветы, Еда».Кто-нибудь знает лучший способ сделать это? Кроме того, у этой техники есть техническое название?