【问题标题】:mysql left join with group_concat - only shows a single resultmysql left join with group_concat - 只显示一个结果
【发布时间】:2020-11-04 10:29:18
【问题描述】:

所以我不确定我是否采取了正确的方法,但这是我所追求的: 我需要从表 A 中获取所有记录

然后加入表 B 并连接所有与表中特定 ID 匹配的值。

我在下面的查询中注意到的是,我只得到表 B 中有记录的结果 - 如果表 A 中没有相应的值,我希望能够在我的结果集中显示一个 NULL 值

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;

我想返回所有账户和账户状态以及开户日期 然后,如果 Expense 具有该行的值,则将这些值与“:”连接起来作为分隔符。

我似乎只在两个表中都存在记录的情况下得到结果。

【问题讨论】:

  • 在散文中含糊地重复错误代码的作用并不能清楚地表达你想要什么。说明所需的输出如何是输入的函数。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。 PSHow to select from two tables in MySQL even if not all rows in one table have corespondents in the other?
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。

标签: mysql sql string date join


【解决方案1】:

您正在描述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

我也没有看到GROUP BY 子句中表达MONTH(DATE(AccountOpenedDate)) 的意义:您似乎希望每个帐户有一行,所以这似乎无关紧要。

上面的查询是在accountID是表account的主键的假设下工作的:同一列中的其他列在功能上依赖于主键,所以你不需要在@987654327中列出它们@ 子句。你也可以这样写:

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

旁注:

  • 表别名使查询更易于编写和阅读

  • 在多表查询中,所有列都应使用它们所属的表(别名)来限定(前缀)

【讨论】:

  • 完美,这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2013-11-02
  • 1970-01-01
相关资源
最近更新 更多