我是SQL的新手。
我有两张桌子:
我想显示一个表格,根据例如类别显示品牌:
ID__________Category ______________Brand
1___________category-a _____________brand-x
2___________category-b _____________brand-y
3___________category-c______________brand-z
4___________category-d______________brand-x
5___________category-e______________brand-x
6___________category-e______________brand-y
每个品牌可以分为1个或n个类别,每个品类可以有1个或n个品牌。
我是否必须创建另一个表来合并2个表?我有点困惑,因为我读了一些sql教程,但给出的例子不是2个关联表。 谢谢:))
答案 0 :(得分:1)
您通常会创建一个映射关系的中间表(在这种情况下多对多)。
brand_category
category_id brand_id
然后您可以执行以下操作:
-- Get all brands for a category
SELECT * FROM brand
INNER JOIN brand_category ON (brand.id = brand_category.brand_id AND brand_category.category_id = 12)
-- List all brands along with categories
SELECT brand.name,category.name FROM brand
LEFT JOIN brand_category ON (brand.id = brand_category.brand_id)
LEFT JOIN category ON (brand_category.category_id = category.id)
答案 1 :(得分:1)
您需要一个连接表,例如:
CREATE TABLE category_brand (
category_id NUMERIC,
brand_id NUMERIC,
);
ALTER TABLE category_brand
ADD CONSTRAINT category_brand_pk PRIMARY KEY (category_id, brand_id);
现在,您可以使用联接查询:
SELECT category, brand
FROM category c
JOIN category_brand cb ON c.category_id = cb.category_id
JOIN brand b ON cb.brand_id = b.brand_id
答案 2 :(得分:0)
品牌和类别之间的联系是多对多的。这意味着,它必须是另一个BrandCategory表,包含来自品牌和类别的主键。