Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 跨一圈表进行查询_Sql_Ms Access_Database Design - Fatal编程技术网

Sql 跨一圈表进行查询

Sql 跨一圈表进行查询,sql,ms-access,database-design,Sql,Ms Access,Database Design,我很好奇如何从一个“圆圈”的表格中获取所需的数据 我有5个表(和一些支持表):3个由连接表连接的实体。因此,一般模型如下所示: 卡片有很多预算,账户有很多预算,账户有很多卡片 所以我的关系形成一个圆圈,通过连接表,从卡到预算再到卡,这个结构工作得非常好,直到今天,当我试图使用所有5个表构造一个查询时,我注意到我知道没有办法避免这种结构中存在的无关联连接。我认为创建AccountBudget和CardBudget表可能是一个更好的主意,但由于它们都定义了完全相同类型的数据,因此一个表似乎更有效 我

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

我有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]));