小编典典

基本的多对多SQL选择查询

sql

我认为这应该很容易,但是却在逃避我。我在帐户和帐户组之间建立了多对多关系。一个帐户可以在零个或多个组中,因此我使用的是标准联接表。

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

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

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

我正在使用MS Access,FWIW。另外,这是针对低带宽的情况,因此代码优化不如简单性/可读性那么重要。

我使用php作为表示层,因此Access的基本结果很好。

至于如何处理多结果情况,我实际上有两件事正在尝试构建。第一列在一个列中列出了所有组,因此:

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

第二个是主从列表:

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

对于主细节,我的计划是从db中获得较大的结果集,并根据需要在php中进行修改。由于无论如何都会在php中进行一些重要的后处理,也许我应该只做三个单独的查询并在那里进行连接。(因为我对这种语言比较满意。)


阅读 171

收藏
2021-04-07

共1个答案

小编典典

SELECT a.BankName, a.AcctNumber, a.Balance, ag.GroupName
FROM (Accounts a 
      LEFT JOIN JoinAccountsGroups jag 
      ON a.ID = jag.AID) 
      LEFT JOIN AccountGroups ag
      ON jag.GID = ag.GroupName;

将为第一个表选择数据,但是要连接组(每月,工资),您将需要一个用户定义函数(UDF),而Jet则无法使用它,因此有必要在PHP中进行处理。

您可能希望阅读了解SQL连接。它指的是MySQL,但大部分情况下适用于Jet。

2021-04-07