Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Select con Where not

Estas en el tema de Select con Where not en el foro de Mysql en Foros del Web. Hola foreros!, Estoy haciendo un select para mi base de datos pero no se por que razon no me funciona, jeje... mirar el select es ...
  #1 (permalink)  
Antiguo 27/04/2009, 09:16
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años
Puntos: 19
Select con Where not

Hola foreros!,

Estoy haciendo un select para mi base de datos pero no se por que razon no me funciona, jeje... mirar el select es este:

SELECT
user,
date,
(SELECT COUNT(id) FROM traffic where datum_type = "sentence" and datum_id = sentence.id) AS visit
FROM sentence where visit IS NOT NULL

El select funciona perfectamente, pero cuando escribo 'where visit IS NOT NULL' me da error, jeje. Lo que quiero es que si en la base de datos de traffic no encuentra ningun registro no me seleccione ningun registro de sentence, jeje.

¿Sabeis por que no va?
  #2 (permalink)  
Antiguo 27/04/2009, 09:28
Avatar de 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, 4 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)
  #3 (permalink)  
Antiguo 27/04/2009, 10:10
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años
Puntos: 19
Respuesta: Select con Where not

Hola, jeje...

Mucha gracias! gnzsoloyo!... me has solucionado el problemon, jeje...

Hasta pronto!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:37.