Ponieważ chcesz zerowych wartości dla niedopasowanych wierszy, jest to praca dla LEFT JOIN
, jak:
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`
Liczymy t1.key
ponieważ pasujące wiersze będą takie same w pierwszym tabeli (a nie drugiej) - dlatego powinniśmy pogrupować według niej - a nie według pola w drugiej tabeli.
Wskazówka :unikaj nazywania tabel/kolumn zastrzeżonymi słowami mysql. Dzięki temu zaoszczędzisz mnóstwo czasu, jeśli przypadkowo zapomnisz o backtickach.