2017-10-14 102 views
0

我有兩個表:inviteesinvitee_information。被邀請者屬於events(第三個表event_id是invitees表中的外鍵)。使用group by with left join和IN得到空結果

我想獲得每個事件中沒有可用信息的被邀請者總數(invitee_information表中沒有記錄)。

當我寫只使用一個event_id在where子句和反連接模式(IS NULL爲invitee_id列,從而提供具有保存的任何信息行篩選)如預期,鑑於事項標識返回計數查詢:

SELECT COUNT(i.id) 
FROM invitees i 
LEFT JOIN invitee_information ii 
ON ii.invitee_id = i.id 
WHERE ii.invitee_id IS NULL AND i.`event_id` = 18571 AND i.`invitation_sent` = 1; 

現在爲了優化查詢以獲得在DB級這個數據算多event_ids,而不是在每個事項標識循環得到這個,我用,並通過多種event_ids和使用GROUP_BY event_id

預期結果應該是(如果沒有保存在invitee_information表事項標識18569數據:

event_id | count(i.id) 
18569 |   0 

但查詢結果總是空的我的更新查詢:

SELECT i.`event_id`, COUNT(i.id) 
FROM invitees i 
LEFT JOIN invitee_information ii 
ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND i.`event_id` IN(18569,18571) AND i.`invitation_sent` = 1 
GROUP BY i.`event_id`; 

回答

0

唯一我可以想象這種情況發生的方式是,如果您有國際化設置,例如,意味着小數點。您可以使用以下方式輕鬆測試:

SELECT i.`event_id`, COUNT(i.id) 
FROM invitees i LEFT JOIN 
    invitee_information ii 
    ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND 
     (i.`event_id` = 18569 OR i.`event_id` = 18571) AND 
     i.`invitation_sent` = 1 
GROUP BY i.`event_id`; 

如果這樣做,那麼至少我們已經確定了問題。我想,那麼空間的工作原理:

SELECT i.`event_id`, COUNT(i.id) 
FROM invitees i LEFT JOIN 
    invitee_information ii 
    ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND 
     i.`event_id` IN (18569, 18571) AND 
     i.`invitation_sent` = 1 
GROUP BY i.`event_id`; 

我要指出,你可能要在SELECT而非COUNT(i.id)COUNT(ii.invitee_id)。後者將永不返回0

編輯:

也許兩個事件不在invitees表。假設你有一個事件表,那麼像這樣:

SELECT e.event_id, COUNT(i.id) 
FROM events e LEFT JOIN 
    invitees i 
    ON i.event_id = e.event_id AND 
     i.invitation_sent = 1 LEFT JOIN 
    invitee_information ii 
    ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND 
     e.event_id IN (18569, 18571) AND 
GROUP BY e.event_id; 
+0

謝謝你的迴應。不,這兩個查詢都產生了一個空的結果。此外,這可能是我的第一個查詢只有一個event_id將始終返回0作爲計數? –

+0

我在計算invitees.id,因爲我想計算所有沒有提供信息的被邀請者。沒有提供的信息表示在invitee_information表中沒有包含invitee_id作爲外鍵的記錄。 –

+0

@AliMalik。 。 。兩個被邀請者都不在'被邀請者'的問題嗎?這不是我如何理解你的問題,但這可能是你想要問的。 –