Dal momento che vuoi zero valori per le tue righe non corrispondenti, è un lavoro per LEFT JOIN
, come:
SELECT
t1.*,
IF(t2.`key` IS NULL, 0, COUNT(t1.`key`)) AS t2_row_count
FROM
t1
LEFT JOIN t2
ON t1.id=t2.id
AND
t1.category=t2.category
GROUP BY
t1.`key`
Stiamo contando t1.key
perché per le righe abbinate saranno le stesse in first tabella (e non seconda) - quindi, dovremmo raggruppare per essa - e non per campo nella seconda tabella.
Suggerimento :evita di nominare le tue tabelle/colonne con parole riservate mysql. Questo ti farà risparmiare un sacco di tempo se dimenticherai accidentalmente i backtick.