我有两张桌子。
一个表存储项目及其成本,并使用自己的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上相当新,在这里通过火学习。如果有更好的方法来构建这个,我愿意接受建议。
感谢。
答案 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
表和一个单独的表来将ItemCost
与Workspace
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