Eftersom du vill ha nollvärden för dina icke-matchade rader, är det ett arbete för LEFT JOIN
, som:
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`
Vi räknar t1.key
eftersom de för matchade rader kommer att vara samma i första tabell (och inte andra) - därför bör vi gruppera efter den - och inte efter fält i den andra tabellen.
Tips :undvik att namnge dina tabeller/kolumner med reserverade mysql-ord. Detta kommer att spara mycket tid om du av misstag glömmer backticks.