mysql left join with group\u concat-只显示一个结果

eufgjt7s  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(309)

因此,我不确定我是否采取了正确的方法,但我的目标是:我需要从表a中获取所有记录
然后在表b上连接并连接与表中特定id匹配的所有值。
我在下面的查询中注意到的是,我只得到表b中有记录的结果—如果表a中没有相应的值,我希望能够在结果集中显示空值

SELECT Account.AccountID, AccountOpenedDate, AccountStatus, GROUP_CONCAT(Expense.ExpenseType SEPARATOR ':') AS Expense FROM Account
    JOIN Expense ON Account.AccountID=Expense.AccountID
    GROUP BY MONTH(DATE(AccountOpenedDate)), Account.AccountID
    ORDER BY Account.AccountID ASC;

我想返回所有帐户、帐户状态和打开日期,然后如果费用有该行的值,则显示这些值,并用“:”作为分隔符。
我似乎只在两个表中都有记录的情况下才得到结果。

2ic8powd

2ic8powd1#

你在描述一个 left join :

select 
    a.accountID, 
    a.accountOpenedDate, 
    a.accountStatus, 
    group_concat(e.expenseType separator ':') as expense 
from account a
left join expense e on e.accountID = a.accountID
group by a.accountID
order by a.accountID

我也不明白表达的意义 MONTH(DATE(AccountOpenedDate))GROUP BY 你似乎希望每个帐户有一行,所以这似乎无关紧要。
上述查询的工作假设是 accountID 是表的主键 account :同一列中的其他列在功能上依赖于主键,因此不需要在 group by 条款。你也可以这样写:

select 
    a.accountID, 
    a.accountOpenedDate, 
    a.accountStatus, 
    group_concat(e.expenseType separator ':') as expense 
from account a
left join expense e on e.accountID = a.accountID
group by a.accountID, a.accountOpenedDate, a.accountStatus
order by a.accountID

旁注:
表别名使查询更易于编写和读取
在多表查询中,所有列都应该使用它们所属的表的(别名)进行限定(前缀)

相关问题