-1

テーブルの「サークル」から必要なデータを取得する方法に興味があります。

私は 5 つのテーブル (およびいくつかのサポート テーブル) を持っています: ジャンクション テーブルで結合された 3 つのエンティティ。したがって、一般的なモデルは次のようになります。

カードには多くの予算があり、アカウントには多くの予算があり、アカウントには多くのカードがあります。

したがって、私のリレーションシップは、ジャンクション テーブルを介して、カードから予算、アカウント、カードに戻るという円を形成します。この構造が配置されているあいまいな結合を回避する方法。AccountBudget テーブルと CardBudget テーブルを作成したほうがよかったのではないかと思いますが、どちらもまったく同じ種類のデータを定義するため、1 つのテーブルの方が効率的であると思われます。

私が取得しようとしている情報は、基本的に、特定のタイプのすべてのカードの合計予算制限と、同じタイプのすべてのアカウントの合計予算制限です。私はこの問題を間違って見ているだけですか?

// 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.)

見ての通り円です。私が達成しようとしているのは、2 つの列を持つ 1 つの行を返すことです。 whereBudget.limitのレコードの合計と、同じ型の sに属するすべての行の合計です。AccounttypeId = 1Budget.limitCardAccount

提案に従って、実際にはユニオンから必要なデータを取得できますが、データが2つの別々の列にない場合は役に立ちません:

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

では、私の理解が正しければ、同じ名前の別の列ヘッダーを作成したため、情報を分離する必要があるため、データが歪んでしまうのでしょうか? この場合、提案したように列ヘッダーを変更するか、2 つのクエリをリンクすることをお勧めします。同じタグ付きの名前を照会してデータを接続すると、結果が結合されます。何かを指定したい場合は、列ヘッダーに別の名前を作成することをお勧めします。

ここでは、SQL を使用して複数のテーブルをクエリする方法について説明します: http://www.techrepublic.com/article/sql-basics-query-multiple-tables/1050307

于 2012-06-29T21:44:41.920 に答える
0

最初にカードのクエリを作成し、次にアカウントのクエリと結合します

カードをアカウントに関連付けて、アカウントの予算のみを設定する方が簡単ですが、それがスキーマで機能するかどうかはわかりません

于 2012-06-29T21:49:48.973 に答える