-1

我很好奇如何从表格的“圆圈”中获取所需的数据。

我有 5 个表(和一些支持表): 3 个由联结表连接的实体。所以一般模型是这样的:

Cards有很多BudgetsAccounts有很多BudgetsAccounts有很多Cards

所以我的关系通过连接表形成一个圆圈,从卡到预算再到账户再到卡,直到今天,当我尝试使用所有 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.)

如您所见,它是一个圆圈。我想要完成的是返回一行,其中包含两列:whereBudget.limit中记录的总和,以及属于同一类型的 s 中的所有行的总和。AccounttypeId = 1Budget.limitCardAccount

根据建议,我实际上可以从联合中获取我需要的数据,但如果数据不在两个单独的列中,这对我没有用:

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]));
4

2 回答 2

1

所以,如果我理解正确,您已经使用相同的名称制作了单独的列标题,因此您的数据会因为信息需要分开而出现偏差?如果是这种情况,我建议按照您的建议更改列标题,或者将两个查询链接在一起。通过查询相同的标记名称来连接数据将组合结果。如果您想指定某些内容,为列标题创建单独的名称总是一个好主意。

下面是使用SQL查询多表的解释:http ://www.techrepublic.com/article/sql-basics-query-multiple-tables/1050307

于 2012-06-29T21:44:41.920 回答
0

首先查询 Cards,然后与 Accounts 查询合并

尽管将卡与帐户相关联然后只有帐户预算会更容易,但是我不知道这是否适用于您的架构

于 2012-06-29T21:49:48.973 回答