我很好奇我如何才能從表格的「圓圈」中獲取所需的數據。查詢圍成一圈表
我有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.)
正如你所看到的,它是一個圓圈。我試圖完成的是返回一列兩列:Account
中的記錄的Budget.limit
的總和,其中typeId = 1
和Budget.limit
的總和爲Card
,屬於Account
s的所有行都屬於同一類型。
按照建議,我其實可以得到我從工會需要的數據,但如果數據不是兩個單獨的列也沒有用對我說:
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]));
告訴我們的架構..我們可以幫助更好。 – AJP
添加了表格結構以及我如何計算給定帳戶類型的卡片的總預算。 –
固定。只是一個錯字。 –