Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Zählen von Zeilen und Linksverknüpfungsproblem

Ich würde mich für so etwas entscheiden:

SELECT 
    c.id AS campaign_id, 
    COUNT(cc.id) AS code_count
FROM 
    campaigns c
LEFT JOIN campaign_codes cc on cc.campaign_id = c.id
AND cc.status = 0 -- Having this clause in the WHERE, effectively makes this an INNER JOIN
WHERE c.partner_id = 4
GROUP BY c.id

Verschieben des AND an die join-Klausel führt dazu, dass der Join erfolgreich ist oder fehlschlägt, wobei es wichtig ist, dass die resultierenden Zeilen dort bleiben, wo es keine übereinstimmende Zeile in der 'richtigen' Tabelle gibt.

Wenn es im WHERE wäre , würden die Vergleiche mit NULL (wo es keinen Kampagnencode gibt) fehlschlagen und aus den Ergebnissen eliminiert werden.