无法在mysql查询中获取左外部联接结果 选择 BB.NAME BranchName, 六、 命名村庄, 计数(BAC.CBSACCOUNTNUMBER)‘账户数量’, 总和(BAC.CURRENTBALANCE)总和, 总数(例) 当transactiontype='C'时,则为金额 其他0 (完)总计,, 总数(例) 当transactiontype='D'时,则为金额 其他0 结束)作为借方, 总数(例) 当transactiontype='C'时,则为金额 当transactiontype='D'时,则为-1*金额 其他0 结束)作为当前余额 从…起 客户CU, 申请人AP, 地址广告, 六村, 银行BB分行, 银行帐户 左外连接 accounttransaction ACT ON BAC.CBSACCOUNTNUMBER=ACT.BANKACCOUNT\u CBSACCOUNTNUMBER 和ACT.TRANDATE

无法在mysql查询中获取左外部联接结果 选择 BB.NAME BranchName, 六、 命名村庄, 计数(BAC.CBSACCOUNTNUMBER)‘账户数量’, 总和(BAC.CURRENTBALANCE)总和, 总数(例) 当transactiontype='C'时,则为金额 其他0 (完)总计,, 总数(例) 当transactiontype='D'时,则为金额 其他0 结束)作为借方, 总数(例) 当transactiontype='C'时,则为金额 当transactiontype='D'时,则为-1*金额 其他0 结束)作为当前余额 从…起 客户CU, 申请人AP, 地址广告, 六村, 银行BB分行, 银行帐户 左外连接 accounttransaction ACT ON BAC.CBSACCOUNTNUMBER=ACT.BANKACCOUNT\u CBSACCOUNTNUMBER 和ACT.TRANDATE,mysql,mysql-workbench,Mysql,Mysql Workbench,我猜您的问题是,您的accounttransaction表中没有数据的帐户无法获得结果,即使您使用的是左联接。如果这是真的,原因是因为您的加入条件包括和ACT.BANKACCOUNT\u CBSACCOUNTNUMBER不为空,这会破坏左加入。在WHERE子句中还有两个条件,我打赌它们不应该存在 您应该学会在编码中使用显式联接语法。如果您这样做,您的代码将更加清晰;它将连接条件从WHERE子句中分离出来,后者的作用非常不同。我尝试重新编写您的查询,以作为说明: SELECT

我猜您的问题是,您的
accounttransaction
表中没有数据的帐户无法获得结果,即使您使用的是
左联接。如果这是真的,原因是因为您的加入条件包括
和ACT.BANKACCOUNT\u CBSACCOUNTNUMBER不为空
,这会破坏
左加入
。在
WHERE
子句中还有两个条件,我打赌它们不应该存在

您应该学会在编码中使用显式联接语法。如果您这样做,您的代码将更加清晰;它将连接条件从
WHERE
子句中分离出来,后者的作用非常不同。我尝试重新编写您的查询,以作为说明:

  SELECT 
        BB.NAME BranchName,
        VI.NAME Village,
        COUNT(BAC.CBSACCOUNTNUMBER) 'No.Of Accounts',
        SUM(BAC.CURRENTBALANCE) SumOfAmount,
        SUM(CASE
            WHEN transactiontype = 'C' THEN amount
            ELSE 0
        END) AS CreditTotal,
        SUM(CASE
            WHEN transactiontype = 'D' THEN amount
            ELSE 0
        END) AS DebitTotal,
        SUM(CASE
            WHEN transactiontype = 'C' THEN amount
            WHEN transactiontype = 'D' THEN - 1 * amount
            ELSE 0
        END) AS CurrentBalance
    FROM
        CUSTOMER CU,
        APPLICANT AP,
        ADDRESS AD,
        VILLAGE VI,
        BANKBRANCH BB,
        BANKACCOUNT BAC
            LEFT OUTER JOIN
        accounttransaction ACT ON BAC.CBSACCOUNTNUMBER = ACT.BANKACCOUNT_CBSACCOUNTNUMBER
            AND ACT.TRANDATE <= '2013-03-21'
            AND BAC.ACCOUNTOPENINGDATE < '2013-03-21'
            AND ACT.BANKACCOUNT_CBSACCOUNTNUMBER IS NOT NULL
    WHERE
        CU.CODE = AP.CUSTOMER_CODE
            AND BAC.ENTITY = 'CUSTOMER'
            AND BAC.ENTITYCODE = CU.CODE
            AND AD.ENTITY = 'APPLICANT'
            AND AD.ENTITYCODE = AP.CODE
            AND AD.VILLAGE_CODE = VI.CODE
            AND AD.STATE_CODE = VI.STATE_CODE
            AND AD.DISTRICT_CODE = VI.DISTRICT_CODE
            AND AD.BLOCK_CODE = VI.BLOCK_CODE
            AND AD.PANCHAYAT_CODE = VI.PANCHAYAT_CODE
            AND CU.BANKBRANCH_CODE = BB.CODE
            AND BAC.CBSACCOUNTNUMBER IS NOT NULL
            AND ACT.TRANSACTIONTYPE IS NOT NULL
    GROUP BY BB.NAME , VI.NAME;
我从WHERE子句中删除了这两行

AND ACT.BANKACCOUNT_CBSACCOUNTNUMBER IS NOT NULL
如果这不能解决您的问题,请修改您的问题以进一步解释

更新:根据注释,修改查询以使用派生表按帐户计算借方、贷方和当前余额


还要注意左侧连接上的
BAC.ACCOUNTOPENINGDATE<'2013-03-21'
条件的位置。如前所述,这将返回所有帐户,而不考虑开户日期。如果您只想显示在该日期之前开立的账户,则应将此条件移至
WHERE
子句。

好,现在我们知道您想要什么了。目前的问题是什么?此外,你能把这个大问题简化为实际问题吗?a也会有帮助……或者至少可以很好地格式化它?我已经格式化了,请看看这个MySQL工作台与此有什么关系?它在工作台之外工作吗?为什么要混合两个连接语法?哦,等等,我已经说过了。:)不要将隐式(逗号-)和显式联接样式(除非您真的知道自己在做什么)混合在BankBranch表中的一个分支中,该分支具有263个帐户。当我使用左外部联接执行上述查询时,计数增加到293,这是错误的,因为只有在该分支下打开的帐户是263。结果是293,这是错误的。如果我删除左外部联接,那么当我包括左外部联接时,一个分支的结果是263,然后计数增加到293,请帮助我问题出在哪里?列
transactiontype
amount
来自
accounttransaction
表?如果是这样,您可能需要使用“派生表”来获得正确的结果。确认后,我会用可能的解决方案更新答案。是的,交易类型和金额仅来自accounttransaction表。我没有从bankbranch获得帐户总数,但该数字仅为293,而不是263。抱歉,我无法提供更多帮助;我想你的数据比我能说的要复杂。堆栈溢出不是解决复杂问题的好地方。
AND ACT.BANKACCOUNT_CBSACCOUNTNUMBER IS NOT NULL
AND BAC.CBSACCOUNTNUMBER IS NOT NULL
AND ACT.TRANSACTIONTYPE IS NOT NULL