2012-06-29 44 views
-1

我很好奇我如何才能從表格的「圓圈」中獲取所需的數據。查詢圍成一圈表

我有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 = 1Budget.limit的總和爲Card,屬於Accounts的所有行都屬於同一類型。

按照建議,我其實可以得到我從工會需要的數據,但如果數據不是兩個單獨的列也沒有用對我說:

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])); 
+0

告訴我們的架構..我們可以幫助更好。 – AJP

+0

添加了表格結構以及我如何計算給定帳戶類型的卡片的總預算。 –

+0

固定。只是一個錯字。 –

回答

1

所以,如果我理解你正確地說,你已經制作了具有相同名稱的單獨列標題,因此信息需要分離,因此數據會發生偏斜?如果是這種情況,我會建議按照您的建議更改列標題,或者將兩個查詢鏈接在一起。通過查詢相同的標籤名來連接數據將結合結果。如果您想指定某些內容,爲列標題創建單獨的名稱總是一個好主意。

下面是使用SQL查詢多個表的說明:http://www.techrepublic.com/article/sql-basics-query-multiple-tables/1050307

0

首先要對卡的查詢,然後與查詢賬戶

工會雖然它會更容易涉及卡帳戶,然後只有帳戶的預算,但我不知道這是否會與您的架構

+1

看到我關於工會的最新更新。 –