簡體   English   中英

mysql 與 group_concat 左連接 - 僅顯示單個結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM