[英]mysql left join with group_concat - only shows a single result
所以我不確定我是否采取了正確的方法,但這就是我所追求的:我需要從表 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 具有該行的值,則顯示那些與“:”連接的值作為分隔符。
我似乎只在兩個表中都存在記錄的情況下得到結果。
您正在描述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
的主鍵:同一列中的其他列在功能上依賴於主鍵,因此您不需要在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
旁注:
表別名使查詢更易於編寫和閱讀
在多表查詢中,所有列都應使用它們所屬的表(別名)進行限定(前綴)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.