unicos - count en mysql workbench
MySQL-Conteo de filas y problema de uniĆ³n izquierda (2)
Tengo 2 tablas, campañas y códigos de campaña:
campañas: id, partner_id, estado
campaign_codes: id, código, estado
Deseo obtener un recuento de todos los códigos de campaña para todas las campañas DONDE campaign_codes.status es igual a 0 O donde no hay registros campaign_codes para una campaña.
Tengo el siguiente SQL, pero por supuesto la instrucción WHERE elimina aquellas campañas que no tienen registros correspondientes en campaign_codes (también quiero aquellas campañas con cero campaign_codes)
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
WHERE c.partner_id = 4
AND cc.status = 0
GROUP BY c.id
Optaría por algo como:
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
Mover la cláusula AND
a la cláusula join hace que la combinación tenga éxito o falle, lo que es crucial para mantener las filas resultantes donde no hay una fila coincidente en la tabla ''derecha''.
Si estuviera en WHERE
, las comparaciones con NULL (donde no hay campaign_code) fallarían, y serían eliminados de los resultados.
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 c.partner_id = 4
AND cc.status = 0
GROUP BY c.id