私は、Product
,Category
、およびProduct_To_Category
テーブルを持っているとしましょう。製品は複数のカテゴリに分類できます。あるテーブルを別のテーブルに複数回結合するSQL? (商品をカテゴリにマッピングする)
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
私は私の結果など
ProductName | Category_1 | Category_2 | Category_3 ======================================================= Rose | Flowers | | Chocolate Flower | Flowers | Food |
などを与えるSQLクエリを希望
私はこれを取得することができました最善の方法は、労働組合への束であります一緒に質問する。特定の製品の予想カテゴリ数ごとに1つのクエリ。
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つの照会が必要です。
- 第2に、カテゴリは同じ列に均等に配置されません。たとえば、商品に「食べ物、花」があり、「花、食べ物」がある場合もあります。
誰かがこれを行うより良い方法を知っていますか?また、このテクニックには技術的な名前がありますか?
GROUP BYを追加する必要があると思いますか? – meleyal
絶対に!それを忘れてしまった、ありがとう! – Seb
GROUP BYが指定されていない場合、このクエリはCOUNT(*)クエリが1つの行だけを返すのと同じ方法で1つの行を返します。 – chim