Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/04/2009, 09:28
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Select con Where not

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 original
  1. SELECT USER, DATE, visit
  2. FROM
  3.    (SELECT
  4.        USER,
  5.        DATE,
  6.        (SELECT COUNT(id) FROM traffic WHERE datum_type = "sentence" AND datum_id = sentence.id) AS visit
  7.    FROM sentence ) T1
  8.    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 original
  1. SELECT
  2.   usuario,
  3.   fecha,
  4.   SUM(IF(T.id IS NULL,0,1)) visit
  5. FROM sentence S LEFT JOIN traffic T ON  T.datum_id = S.id
  6. 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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)