如何将一个 table 关联到另一个已经有关系 (N:N) 的 table?
How to relate a table to another table that already has a relationship (N:N)?
我有点难以理解跟随关系。我有三个实体,品牌、细分市场和产品。一个品牌可以有多个细分市场,一个细分市场可以有多个品牌。一种产品可以有一个段,一个段可以有多种产品。我不明白如何将产品实体与细分市场相关联。目标是获得产品并确定您的细分市场和品牌。
1 个品牌:N 个细分市场
1 细分:N 个品牌
1 个产品:1 个细分市场
1 个细分:N 个产品
您可以像下面这样加入他们并检索相关数据。
SELECT seg.Segment, prd.Product, brn.Brand
FROM Segment seg
LEFT JOIN Brand brn on brd.ID = seg.ID
LEFT JOIN Product prd on prd.ID = seg.ID
ID 字段是您的主键和外键。
您正在处理品牌和细分市场之间的 N:M 关系。一个典型的解决方案是在 tables brands
和 segments
之间创建一个桥 tables。假设 table brands
有主键 brand_id
并且 segments
有主键 segment_id
,你可以创建第三个 table 叫做 brand_segments
,使用 brand_id
和 segment_id
列来表示关系。
另一方面,细分市场与产品之间的关系是 1:N。您可以通过在 products
table 中添加一列来表示这一点,该列存储对其所属段的 ID 的引用。
示例架构
brands
brand_id
brand_name
segments
segment_id
segment_name
products
product_id
product_name
segment_id
brand_segments
brand_id
segment_id
恢复与产品关联的所有细分市场的查询:
SELECT p.*, s.*
FROM products p
INNER JOIN segments s ON s.segment_id = p.segment_id
恢复与产品关联的所有品牌的查询:
SELECT p.*, b.*
FROM products p
INNER JOIN brand_segments bs ON bs.segment_id = p.segment_id
INNER JOIN brands b ON b.brand_id = bs.brand_id
两个查询合并
SELECT p.*, s.*, b.*
FROM products p
INNER JOIN segments s ON s.segment_id = p.segment_id
INNER JOIN brand_segments bs ON bs.segment_id = p.segment_id
INNER JOIN brands b ON b.brand_id = bs.brand_id
我有点难以理解跟随关系。我有三个实体,品牌、细分市场和产品。一个品牌可以有多个细分市场,一个细分市场可以有多个品牌。一种产品可以有一个段,一个段可以有多种产品。我不明白如何将产品实体与细分市场相关联。目标是获得产品并确定您的细分市场和品牌。
1 个品牌:N 个细分市场
1 细分:N 个品牌
1 个产品:1 个细分市场
1 个细分:N 个产品
您可以像下面这样加入他们并检索相关数据。
SELECT seg.Segment, prd.Product, brn.Brand
FROM Segment seg
LEFT JOIN Brand brn on brd.ID = seg.ID
LEFT JOIN Product prd on prd.ID = seg.ID
ID 字段是您的主键和外键。
您正在处理品牌和细分市场之间的 N:M 关系。一个典型的解决方案是在 tables brands
和 segments
之间创建一个桥 tables。假设 table brands
有主键 brand_id
并且 segments
有主键 segment_id
,你可以创建第三个 table 叫做 brand_segments
,使用 brand_id
和 segment_id
列来表示关系。
另一方面,细分市场与产品之间的关系是 1:N。您可以通过在 products
table 中添加一列来表示这一点,该列存储对其所属段的 ID 的引用。
示例架构
brands
brand_id
brand_name
segments
segment_id
segment_name
products
product_id
product_name
segment_id
brand_segments
brand_id
segment_id
恢复与产品关联的所有细分市场的查询:
SELECT p.*, s.*
FROM products p
INNER JOIN segments s ON s.segment_id = p.segment_id
恢复与产品关联的所有品牌的查询:
SELECT p.*, b.*
FROM products p
INNER JOIN brand_segments bs ON bs.segment_id = p.segment_id
INNER JOIN brands b ON b.brand_id = bs.brand_id
两个查询合并
SELECT p.*, s.*, b.*
FROM products p
INNER JOIN segments s ON s.segment_id = p.segment_id
INNER JOIN brand_segments bs ON bs.segment_id = p.segment_id
INNER JOIN brands b ON b.brand_id = bs.brand_id