加入两个表SQL

时间:2014-08-13 14:51:18

标签: sql

我是SQL的新手。

我有两张桌子:

  1. "类别" (两列" id"和" category_name")
  2. "品牌" (两列" id"和" brand_name")
  3. 我想显示一个表格,根据例如类别显示品牌:

    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个关联表。 谢谢:))

3 个答案:

答案 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表,包含来自品牌和类别的主键。