如何实现此SQL表连接?

时间:2012-12-04 08:03:58

标签: mysql sql sql-server database-design

我一直在试图弄清楚如何在不同的桌子之间创建链接,并且没有运气来解开这个谜团。我学的越多,我就会质疑我应该问什么问题。我制作了一些表格图来展示我想要实现的目标......

我有一个衬衫表,看起来像这样:

shirts table

请注意,在标有“qp_price”和“o_price”的列中,我有文字而不是价格,这是因为我想将其连接到此表:

price list

“qp_price”和“o_price”的值等于price表中“price_cat”列中的值之一。这是我试图在未来简化价格管理的方式。在衬衫表中,你会看到有重复的价值,因为它们的价格相同,除了男士的衬衫外,还有女性的工作人员,男孩,女孩和婴儿。我想将它们链接到一个新的衬衫表中,结果如下:

master shirts

我也想知道索引以及是否最好将其创建为索引:

shirts index

然后将它注入到shirts_master表中,然后执行此操作并将“clr_options”和“qty”列添加到shirts_master表中。我希望它以两种不同的价格组织起来,因为我有两种类型的自定义服务,它们将调用相应的列。最后,我仍然希望衬衫和价格表是单独的,只是链接到另一个表,所以我可以更新它们并让它通过链接自动在主表中读取它。把这个放在一起最聪明的方法是什么?

2 个答案:

答案 0 :(得分:1)

来自SHIRT表的您的列qp_priceo_price应该是外键,它引用表PRICE_LIST中的列price_id。然后,您不需要PRICE_LIST表中的列price_cat

答案 1 :(得分:1)

不确定您想要做什么,但您可以通过简单的加入获得shirts_master

select s.shirt_id, s.shirt_name, s.shirt_type, s.shirt_size,
       qp.price as qp_price, o.price as o_price, s.clr_options, s.qty
from shirts s
join price_list qp on qp.price_cat = s.qp_price
join price_list o on o.price_cat = s.o_price;

如果您希望将其作为视图,可以使用

创建它
create view shirts_master as
select s.shirt_id, s.shirt_name, s.shirt_type, s.shirt_size,
       qp.price as qp_price, o.price as o_price, s.clr_options, s.qty
from shirts s
join price_list qp on qp.price_cat = s.qp_price
join price_list o on o.price_cat = s.o_price;