需要帮助通过guid连接两个表,然后逐行添加值

时间:2013-03-19 19:02:31

标签: sql join one-to-many multiple-tables

我有两张桌子。

一个表存储项目及其成本,并使用自己的guid唯一存储。

ItemCost表

Item_ID     ItemCategory   Item    Cost

x-xx-x      Computer       Laptop  400.00

另一个表存储一个工作空间,它是这些项目的集合,最佳说明。

工作空间表

WorkSpace_ID    Workspace_Name   Item_Category_1     Item_Category_2 and so on....

xx-xx-xx         Workspace A     xx-xx-xx          (the guid from the first table) 

现在我需要一些方法将ItemCost表中的成本加到它们在Work Space表中表示的guid中,然后将它们添加到列中以提供工作空间的总成本。 Work Space表中的某些Item_Category列将为null。

在SQL上相当新,在这里通过火学习。如果有更好的方法来构建这个,我愿意接受建议。

感谢。

2 个答案:

答案 0 :(得分:2)

问题的一部分是Workspace表的结构。此表未规范化。

在您当前的设计中,您需要多次取消隐藏或加入workspace表格才能获得结果。

当前结构查询将是:

select *
from itemcost i
left join
(
  select workspace_id,
    worksapce_name,
    item_category_1 ItemCategory
  from workspace
  union all
  select workspace_id,
    worksapce_name,
    item_category_2
  from workspace
) w
  on i.Item_ID = w.ItemCategory

通常,您会有一个Workspace表和一个单独的表来将ItemCostWorkspace workspace_items相关联:

create table workspace
(
  workspace_id, 
  Workspace_Name
);

create table workspace_items
(
  workspace_id, 
  Item_ID
);

这将使桌面上的加入变得更加容易。此结构允许您为每个工作区分配多个项目类别。如果更改表结构,则查询将为:

select *
from itemcost i
left join workspace_items wo
  on i.item_id = wi.item_id
left join workspace w
  on wi.workspace_id = w.workspace_id

答案 1 :(得分:0)

您需要在WorkSpaces和Items之间创建另外多个表(并从Workspace表中删除Item列):

WorkSpaceItems表: WorkSpace_ID - ItemID

然后很容易查询所有WorkSpaceItems,将其连接到Items表并将其相加。

以下是架构和示例查询的链接:http://www.sqlfiddle.com/#!3/35336/7