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

incluir un valor AS dentro de WHERE

Estas en el tema de incluir un valor AS dentro de WHERE en el foro de Mysql en Foros del Web. hola amigos tengo una consulta que no me han podido contestar en internet: tengo una consulta a mi BD SELECT campo1,campo2, (campo3-campo4) AS edad FROM ...
  #1 (permalink)  
Antiguo 23/06/2008, 16:43
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 19 años
Puntos: 0
De acuerdo incluir un valor AS dentro de WHERE

hola amigos tengo una consulta que no me han podido contestar en internet:

tengo una consulta a mi BD
SELECT campo1,campo2, (campo3-campo4) AS edad FROM tabla
WHERE edad >15

pero el mysql no me deja hacer esta consulta , me podrian ayudar para ver como se coloca????
gracias
  #2 (permalink)  
Antiguo 24/06/2008, 00:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: incluir un valor AS dentro de WHERE

Hazlo así
SELECT campo1,campo2, (campo3-campo4) AS edad FROM tabla
WHERE campo3 - campo4 > 15

Hace muy poco en otro post nos dijo seyko que esos alias no son parte del sql, aunque en algunos casos MySQL acepte su uso. Conviene, pues, no usar esos alias si la sintaxis de SQL vas a usarla con otras bases de datos. Lo que está claro es que MySQL no lo acepta dentro del WHERE, aunque sí en ORDER BY, GROUP BY, HAVING. Eso indica, tal vez, que primero recoge el dato del where y luego lo compara, pero si no ha hecho la selección (que al parecer es posterior) no reconoce el valor del alias; en cambio, parece que el order by es posterior...

Última edición por jurena; 24/06/2008 a las 08:03
  #3 (permalink)  
Antiguo 24/06/2008, 08:36
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, 5 meses
Puntos: 2658
Respuesta: incluir un valor AS dentro de WHERE

Un Tip:
Como regla general de todos los motores de bases de datos, las condiciones de selección (WHERE) deben SIEMPRE referirse a los campos reales de la tabla, por lo que no aceptan alias.
Esto es válido para todos los motores, incluyendo ORACLE 11g, SQL Server 2008, DB2, o MySQL 6.0. No conozco ninguno que tenga alguna excepción a esta regla.
Ignoro la razón con exactitud, pero supongo, por el modo en que "razonan" los SGBD, que debe haber demasiadas complicaciones en la implementación de un algoritmo de condiciones de selección que barra, además de los campos, los alias.
Por lo demás, puedes pensar que algo así en realidad, no reporta utilidad alguna a la eficiencia del SGBD.

Existe dos modos de saltear esta restricción: 1) Cuando se ponen los alias en una vista y la selección hace referencia a la vista. 2) Cuando se trabaja con tablas derivadas (subconsultas), en ese caso hay que tener muy en cuenta los alias usados en la construcción del subquery.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 24/06/2008, 09:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: incluir un valor AS dentro de WHERE

gracias por el Tip, gnzsoloyo. Ahora han quedado claras las razones.
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 07:11.