Sql 跨一圈表进行查询
我很好奇如何从一个“圆圈”的表格中获取所需的数据 我有5个表(和一些支持表):3个由连接表连接的实体。因此,一般模型如下所示: 卡片有很多预算,账户有很多预算,账户有很多卡片 所以我的关系形成一个圆圈,通过连接表,从卡到预算再到卡,这个结构工作得非常好,直到今天,当我试图使用所有5个表构造一个查询时,我注意到我知道没有办法避免这种结构中存在的无关联连接。我认为创建AccountBudget和CardBudget表可能是一个更好的主意,但由于它们都定义了完全相同类型的数据,因此一个表似乎更有效 我试图得到的信息基本上是某一类型的所有卡的总预算限额,以及同一类型的所有账户的总预算限额。我只是看错了这个问题吗Sql 跨一圈表进行查询,sql,ms-access,database-design,Sql,Ms Access,Database Design,我很好奇如何从一个“圆圈”的表格中获取所需的数据 我有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.)
所以,如果我理解正确的话,您使用相同的名称创建了单独的列标题,因此您的数据会因为信息需要分离而发生倾斜?如果是这种情况,我建议按照您的建议更改列标题,或者将两个查询链接在一起。通过查询相同的标记名称来连接数据将合并结果。如果要指定某个内容,最好为列标题创建单独的名称
下面是使用SQL查询多个表的说明:首先查询卡片,然后与帐户查询合并
虽然将卡片与账户关联起来会更容易,然后只为账户编制预算,但是我不知道这是否适用于您的模式向我们展示该模式。。我们可以提供更好的帮助。添加了表结构以及如何计算给定帐户类型卡的总预算。@wtfsven;在我看来,这不是一个查询问题——您能为您的问题添加定义吗。1.什么是信用卡?(包括一个例子)2。什么是预算?(例)3。什么是帐户?(示例)我通过两次使用预算表解决了这个问题,以避免连接创建一个圆。
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]));