sql - 当字段之间存在不规则关系时如何设计表格

标签 sql sql-server

我想在表格中设计以下关系:

PARTNO  OEMNO
--------------    
AA1001  12345
AA1001  67890
AA1002  45678
BB1001  12345
BB1002  12345

PARTNOOEMNO 之间存在不规则关系。

  • PARTNO (AA1001) 可能有多个 OEMNO (12345, 67890)
  • 零件编号 (AA1001) 的替换零件编号 (AA1002) 可能具有不同的 OEMNO(45678、12345 和 67890)
  • 零件编号 (BB1001) 的替换零件编号 (BB1002) 可能具有相同的 OEMNO (12345)
  • OEMNO (12345) 可能有多个 PARTNO(AA1001、BB1001、BB1002)

问题:我真的很困惑如何创建表以及它们之间的关系,以便我可以选择

  • 特定零件编号的所有 OEMNO 和
  • 特定 OEMNO 的所有 PARTNO

最佳答案

每当您有多对多关系时,您都需要一个中间表来分解该关系。这种表有许多不同的名称:例如“关联”、“桥接”、“连接”、“连接”。像这样的事情:

create table parts_oems (
partno varchar (10) not null,
oemno varchar (10) not null,
constraint pk_parts_oems primary key (partno, oemno)
)

然后将表连接到任一部件或 OEM,以确定每个部件与另一个部件关联:-

select p.partno, count (po.partno) as oemcount
from
parts p
inner join parts_oems po on p.partno = po.partno
group by p.partno

要确定哪些 OEM 与零件号 AA1001 相关,您可以编写:-

select p.partno, o.oemno, o.some_other_columns
from
parts p
inner join parts_oems po on p.partno = po.partno
inner join oems o on o.oemno = po.oemno
where p.partno = 'AA1001'

关于sql - 当字段之间存在不规则关系时如何设计表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574092/

相关文章:

mysql - 使用 mysql 进行右连接的简单更新

sql - 重组 Postgrest 查询

sql - "Where IN"具有多个列 (SQL Server)

sql-server - SQL Server : find shared items in 2 columns

arrays - 错误 : ARRAY is missing type definition for its values Sequelize

sql - 将 SQL 行合并为一行

sql-server - 从 sql server 中的 XML 文件中提取 XML 数据时出错

mysql - SQL Server 2012 等效限制分页

sql - 自动从Access中插入数据到Sql server

mysql - 不带 in 的两个条件查询