我很好奇如何从表格的“圆圈”中获取所需的数据。
我有5个表(以及一些支持表):通过联结表连接的3个实体。所以一般模型是这样的:
卡有多个预算,帐户有多个预算和帐户有很多卡。
所以我的关系通过联结表形成一个圆圈,形成卡到预算到账户回卡,这个结构一切正常,花花公子直到今天我试图使用所有5个表构建查询,并注意到我知道无法避免这种结构到位的模糊连接。我认为创建AccountBudget和CardBudget表可能更好一点,但由于它们都将定义完全相同类型的数据,因此一个表似乎更有效。
我想要获得的信息基本上是某种类型的所有卡的总预算限额,以及相同类型的所有帐户的总预算限额。我只是在看这个问题错了吗?
// Card Budget_Card Budget Budget_Account Account
// ------- --------- -------- -------------- ---------
// cardId------\ budgetId<---------budgetId------>budgetId -----accountId--(to Card)->
// accountId --->cardId limit accountId<------/ typeId
// (etc) typeId (etc)
// (typeId in Budget is either 1 for an account budget or 2 for a card budget.)
如你所见,它是一个圆圈。我要完成的是返回一行有两列:Budget.limit
中Account
的总和typeId = 1
,Budget.limit
的总和Card
Account
中属于同一类型SELECT DISTINCTROW Sum(Budget.limit) AS SumOfLimit
FROM (Account RIGHT JOIN Card ON Account.accountId = Card.accountId)
RIGHT JOIN (Budget LEFT JOIN Budget_Card ON Budget.budgetID = Budget_Card.budgetId) ON Card.cardId = Budget_Card.cardId
GROUP BY Budget.typeId, Budget.quarterId, Account.typeId
HAVING (((Budget.typeId)=2) AND ((Budget.quarterId)=[@quarterId]) AND ((Account.typeId)=[@accountType]))
UNION SELECT DISTINCTROW Sum(Budget.limit) AS SumOfLimit
FROM Budget LEFT JOIN (Account RIGHT JOIN Budget_Account ON Account.accountId = Budget_Account.accountId) ON Budget.budgetID = Budget_Account.budgetId
GROUP BY Budget.typeId, Budget.quarterId, Account.typeId
HAVING (((Budget.typeId)=1) AND ((Budget.quarterId)=[@quarterId]) AND ((Account.typeId)=[@accountType]));
的行。
根据建议,我实际上可以从联合获取我需要的数据,但如果数据不在两个单独的列中,则对我没用:
{{1}}
答案 0 :(得分:1)
因此,如果我理解正确,您已经使用相同的名称制作了单独的列标题,因此您的数据会因为信息需要分开而变得不正确?如果是这种情况,我建议您按照提议更改列标题,或者将两个查询链接在一起。通过查询相同的标记名称来连接数据将合并结果。如果要指定某些内容,最好为列标题创建单独的名称。
以下是使用SQL查询多个表的说明:http://www.techrepublic.com/article/sql-basics-query-multiple-tables/1050307
答案 1 :(得分:0)
首先查询卡片,然后与帐户
的查询联合虽然将卡与帐户相关联然后只有帐户预算会更容易,但我不知道这是否适用于您的架构