0

これは簡単なはずですが、私を回避しています。アカウントとアカウント グループの間に多対多の関係があります。アカウントは 0 個以上のグループに属することができるため、標準の結合テーブルを使用しています。

Accounts 
--------
ID
BankName
AcctNumber
Balance

AccountGroups
-------------
ID
GroupName

JoinAccountsGroups
------------------
AID
GID

MS Access、FWIW を使用しています。また、これは低帯域幅の状況のた​​めのものであるため、コードの最適化はシンプルさ/読みやすさほど重要ではありません。

私はプレゼンテーション レイヤーとして php を使用しているので、Access からの最低限の結果で問題ありません。

マルチリザルトの状況をどうするかというと、実際に構築しようとしているものが 2 つあります。最初の例では、次のように 1 つの列にすべてのグループが一覧表示されます。

Bank       AcctNum       Balance    Groups
--------|--------------|----------|----------------
Citi       930938        400        Payroll
HSBC       8372933       100        Monthly, Payroll
Wells      09837         800        -
Chase      8730923       250        Monthly

2 番目はマスター詳細リストです。

Name          AcctNum    Balance
------------|----------|----------
Payroll (2)              500
  Citi        930938     400
  HSBC        8372933    100         
..................................
Monthly (2)              350
  HSBC        8372933    100         
  Chase       8730923    250
..................................
Wells         09837      800

マスター詳細については、データベースから大きな結果セットを取得し、必要に応じてそれを php でマンジするだけの計画でした。いずれにせよ、php には重要な後処理が必要になるため、3 つの個別のクエリを実行して、そこで結合を行う必要があるかもしれません。(私はその言語に慣れているので。)

4

9 に答える 9

1

別の考え... Access でクエリ デザイナーを使用してみませんか。「ビュー」のデザインには約 30 秒かかります。次に、それが書いたSQLを見てください。

于 2009-01-23T21:21:11.760 に答える
0

前に提案したようにクエリ デザイナーを使用するだけでなく、MS Access 関係ツールを使用して、2 つの外部キー (AID、GID) とそれらが参照する主キーの間の関係を記録します。

これにより、クエリ デザイナで自然な結合を行うことは、ほとんど子供の遊びになります。概要を説明した状況では、クエリ ウィザードを使用することもできます。

クエリを作成したら、テーブルを使用する代わりにクエリをレコード ソースとして使用してみませんか?

私が PHP で行うことの 1 つは、複数の結果をカンマ区切りのリストに変換することです。

于 2009-01-25T14:13:32.537 に答える
0

別の試み:

SELECT act.acctid AS AcctId, bankName, acctNumber, Balance, 
    jag.gid AS GroupID, gp.groupname AS GroupName
FROM accounts AS act 
   LEFT OUTER JOIN JointAccountGroups AS jag ON act.id = jag.aid
   LEFT INNER JOIN AccounGroups AS gp ON jag.gid = gp.id

2 つの OUTER JOIN でアクセスに問題がある可能性があるため、2 つ目の JOIN を INNER JOIN にしました。

于 2009-01-23T21:19:28.457 に答える
0

ええ、NULL にはプレゼンテーション レイヤーを使用します。

しかし、私は何かが欠けているに違いありません。最初の試行と同じエラーが表示されます:

Syntax error (missing operator) in query expression '(act.id = jag.aid) 
                  LEFT OUTER JOIN accountgroups gp ON (jag.gid = gp.id)'
于 2009-01-23T17:04:22.700 に答える
0
SELECT act.acctid AS AcctId, bankName, acctNumber, Balance, 
       NVL(jag.gid, '-') AS GroupID, NVL(gp.groupname, '-') AS GroupName
FROM accounts act 
     LEFT OUTER JOIN JointAccountGroups jag ON (act.id = jag.aid) 
     LEFT OUTER JOIN AccounGroups gp ON (jag.gid = gp.id)

NVLは「第一引数がnullなら第二引数を返し、そうでなければ第一引数を返す」という意味の関数です。NVL はたまたま Oracle のやり方です。すべての DB にはそのようなものがありますが、標準的な名前はありません。Access の仕組みを調べてください。

于 2009-01-23T16:54:04.953 に答える
0

Access では、次のようなことを試してみるとよいと思います。

FROM (accounts AS act 
     LEFT OUTER JOIN JointAccountGroups AS jag ON act.id = jag.aid)
     LEFT OUTER JOIN AccounGroups AS gp ON jag.gid = gp.id

なぜ括弧が重要なのかわかりませんが、それでテストを試みたところ、修正されたようです。

于 2009-01-23T19:43:04.517 に答える