Subtitute Parts / Rows Postgresql

时间:2015-09-03 12:18:04

标签: sql postgresql

我想在Postgresql中创建关系,允许我拥有'替代'部分。例如,id为1,2和4的部分是替代品。

执行此操作的一种方法是设置sub_id字段并使用替换部分的id填充该字段。但是从下面的数据集中可以看到一个简单的查询:

SELECT * 
FROM part 
WHERE sub_id = 1

不会返回AA部分的所有替代部分(部分A2将被遗漏)。我如何确保所有替代零件都能满足?

我知道如果A2的sub_id是1,那么一切都会好的。但是,在实际使用中,用户最终可能会犯错,并且会返回错误的结果。

id  part    sub_id
1   AA      1
2   A       1
3   B       NULL
4   A2      2

1 个答案:

答案 0 :(得分:1)

您可以尝试不同的方法。

我不知道你的需求是什么,但这是一个普遍的想法:

设置一个定义零件“组”的表:

partgid, part type,   partg name 
   1       A          Engine for A319
   2       B          Wheel for A319

代码:

Create Table partgroup
(
 partgid int,
 parttype text,
 partgname text 
);
然后

定义组中的部分:

partid  partgid   partname       manufacturerid
 12       1         Engine X319       800
 13       1         Engine XL319      800
 14       1         Engine XFR319     784
 15       2         Wheel F1111       341

代码:

Create Table parts
(
 partid  int,        
 partgid int,
 partname text,
 manufacturerid int 
);

然后您可以通过简单查询访问特定组中的所有部分:

按ID:

select *
from parts
where partgid='ID'

按名称:

select *
from parts
left join partgroup on (partgroup.partgid=parts.partgid)
where partgroup.parttype= 'TYPE NAME'