En MySQL el WHERE no soporta el uso los alias en la operación lógica.
para que esto fuese funcional, debe convertirse en un campo real de una tabla virtual por medio de una subconsulta:
Código sql:
Ver originalSELECT USER, DATE, visit
FROM
(SELECT
USER,
DATE,
(SELECT COUNT(id) FROM traffic WHERE datum_type = "sentence" AND datum_id = sentence.id) AS visit
FROM sentence ) T1
WHERE visit IS NOT NULL)
De todos modos esto no funcionaría por dos razones:
1. Estás usando palabras reservadas como nombre de campo (user y date), lo que generará resultados erróneos.
2. La sunconsulta opera contra la tabla exterior del segundo nivel, a la que no tiene acceso.
En realidad una mejor opción sería:
Código SQL:
Ver originalSELECT
usuario,
fecha,
SUM(IF(T.id IS NULL,0,1)) visit
FROM sentence S LEFT JOIN traffic T ON T.datum_id = S.id
WHERE T.datum_type = 'sentence' AND visit IS NOT NULL;
Obviamente estoy infiriendo la estructura de las tablas involucradas a través de lo que posteas, por lo que aún puede haber errores.