Puisque vous voulez des valeurs nulles pour vos lignes non correspondantes, c'est un travail pour LEFT JOIN
, comme :
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`
Nous comptons t1.key
car pour les lignes correspondantes, elles seront identiques en première table (et non seconde) - nous devrions donc regrouper par elle - et non par champ dans la seconde table.
Astuce :évitez de nommer vos tables/colonnes avec des mots réservés mysql. Cela vous fera gagner beaucoup de temps si vous oubliez accidentellement des backticks.