簡體   English   中英

MySQL JOINED 表查詢應返回零,但不返回這些行

[英]MySQL JOINED table query should return zero but instead does not return those rows

SELECT sg.date, sg.groupName, sg.highlights, 
        user.display_name as displayName,
        COUNT(uc.groupName) as cmtcnt
FROM `saved_groups` as sg
    LEFT JOIN `user` on user.email = sg.userName
    LEFT JOIN `user_comments` as uc on sg.groupName = uc.groupName
WHERE uc.deleted=0
GROUP BY sg.groupName

我有兩個表, saved_groupsuser_comments ,查詢的第二行應該(確實有效)返回一個額外的列,其中包含與每個組關聯的評論數。

但是,當一個組的評論為零時,根本不會返回該組。 返回的唯一行是評論> 0的行。 期望的行為是返回所有 groupNames,並為 uc 表中關聯注釋為零的那些行指定 0。

如何修復此查詢?

我試過: IF(uc.deleted=1, 0, COUNT(uc.groupName)) as cmtcnt - 但這沒有區別,返回相同的結果。

在這一點上,我不確定接下來要嘗試什么。

建議?

你想要所有的記錄? 然后刪除WHERE子句。 您想要0用於沒有計數的記錄嗎? 使用COALESCE 像這樣:

SELECT sg.date
, sg.groupName
, sg.highlights
, user.display_name as displayName
, COALESCE(COUNT(uc.groupName), 0) as cmtcnt 
FROM `saved_groups` as sg 
LEFT JOIN `user` on user.email = sg.userName 
LEFT JOIN `user_comments` as uc on sg.groupName = uc.groupName 
AND uc.deleted = 1 -- to get only deleted comments, and not the others 
GROUP BY sg.groupName

您的 where 條件是過濾記錄並僅返回那些在uc中有數據的記錄,因此左連接沒有好處。 您可以執行( uc.deleted=0 or uc.deleted is null)或將條件 uc.deleted 與加入條件一起移動

在您的代碼中添加 isnull(uc.deleted,0)=0 並將 LEFT JOIN 更改為用戶注釋的內連接。 uc.deleted=0 條件會導致對兩個表進行表掃描,相當於內部連接。 如果您正在尋找 uc.deleted ,請使用左連接是 null。 用戶評論加入是問題。 用戶也可以內聯,因為它與用戶評論鏈接在一起

SELECT sg.date, sg.groupName, sg.highlights, 
        user.display_name as displayName,
        COUNT(uc.groupName) as cmtcnt
FROM dbo.saved_groups as sg
    JOIN dbo.user on user.email = sg.userName
    JOIN dbo.user_comments as uc on sg.groupName = uc.groupName
WHERE isnull(uc.deleted,0) in (0,1)
GROUP BY sg.groupName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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