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

Condición de una consulta sobre un alias de campo?

Estas en el tema de Condición de una consulta sobre un alias de campo? en el foro de Mysql en Foros del Web. ¡Hola! Tengo una consulta como esta: Código: SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'nombre' FROM `people` Quiero agregar una condición con WHERE ...
  #1 (permalink)  
Antiguo 04/10/2010, 07:47
Avatar de qvixote  
Fecha de Ingreso: marzo-2008
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 2
Condición de una consulta sobre un alias de campo?

¡Hola!

Tengo una consulta como esta:

Código:
SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'nombre' FROM `people`
Quiero agregar una condición con WHERE sobre el alias 'nombre', pero no me resulta de esta forma:

Código:
SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'nombre' FROM `people` WHERE 'nombre' LIKE '%juan%'
ya que compara el texto 'nombre' con el patrón '%juan%'. Tampoco funciona dejando nombre sin comillas o así `nombre`, porque me da error de columna desconocida.

¿Cómo puedo resolver esto? ¿Cómo es la sintaxis correcta?

Gracias de antemano.
  #2 (permalink)  
Antiguo 04/10/2010, 07:57
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 4 meses
Puntos: 150
Respuesta: Condición de una consulta sobre un alias de campo?

NOTA: No metan el codigo entre etiquetas [CODE], usen el de [PHP] sino pasan estas cosas que no se ve 1 sola linea!!

Prueba asi, fuera comillas!

SELECT CONCAT(nombres, ' ',apaterno, ' ',amaterno) AS nombre FROM people WHERE nombre LIKE '%juan%'
  #3 (permalink)  
Antiguo 04/10/2010, 07:59
Avatar de qvixote  
Fecha de Ingreso: marzo-2008
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: Condición de una consulta sobre un alias de campo?

Si probé, da el mismo error:

Unknown column 'nombre' in 'where clause'
  #4 (permalink)  
Antiguo 04/10/2010, 08:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Condición de una consulta sobre un alias de campo?

Cita:
Iniciado por qvixote Ver Mensaje
Si probé, da el mismo error:

Unknown column 'nombre' in 'where clause'
Fijate que invocas el campo como "nombres" en el CONCAT y como "nombre" en el WHERE.
El segundo es obviamente incorrrecto.

Si no entiendes los mensajes de error en inglés, usa un traductor... La respuesta era bastante evidente:

"Columna 'nombre' desconocida en cláusula where..."
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/10/2010, 08:32
Avatar de qvixote  
Fecha de Ingreso: marzo-2008
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: Condición de una consulta sobre un alias de campo?

gnzsoloyo:

Conozco lo suficiente de inglés para saber lo que significa el error. El problema no es ese, mira, pongo el ejemplo de otra forma:

SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'campo1' FROM `people` WHERE campo1 LIKE '%juan%'
  #6 (permalink)  
Antiguo 04/10/2010, 09:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Condición de una consulta sobre un alias de campo?

En el primer ejemplo pusiste esto:


Código MySQL:
Ver original
  1. SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'nombre'
  2. FROM `people`
  3. WHERE 'nombre' LIKE '%juan%'

No esto:
Código MySQL:
Ver original
  1. SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'campo1'
  2. FROM `people`
  3. WHERE campo1 LIKE '%juan%'

Como podrás ver en tu propio ejemplo inicial estás comparando el valor indicado en el LIKE con nombre y no con campo1...
MySQL no se equivoca: Pusiste un nombre de campo que no existe.

Si lo corriges así debería funcionar:

Código MySQL:
Ver original
  1. SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'nombre'
  2. FROM `people`
  3. WHERE `nombres` LIKE '%juan%'
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 04/10/2010, 09:21
Avatar de qvixote  
Fecha de Ingreso: marzo-2008
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: Condición de una consulta sobre un alias de campo?

No quiero comparar con el campo `nombres`, sino con todo lo concatenado, que en el primer ejemplo le llamé 'nombre' pero luego en el segundo le puse 'campo1' para que no confundieras.

Por es el nombre de este tema de foro se llama Condición de una consulta sobre un ALIAS de campo.
  #8 (permalink)  
Antiguo 04/10/2010, 09:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Condición de una consulta sobre un alias de campo?

Creo que sufrís un malentendido, pues lo que se pide es la consulta sobre un alias, y creo que eso no es posible.

Se podría hacer esto en su lugar:
Código MySQL:
Ver original
  1. SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) AS 'nombre'
  2.  FROM `people` WHERE CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`)  LIKE '%juan%'
  #9 (permalink)  
Antiguo 04/10/2010, 09:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Condición de una consulta sobre un alias de campo?

Exacto lo que dice jurena.

No se puede usar los alias del SELECT como campos para el WHERE. Ni en MySQL ni en ningún otro. Sólo se puede invocar los campos que realmente existen en la tabla. Es una resrticción general.

Para hacerlo en el WHERE hay que usar la propuesta de jurena , o bien transformar esos alias en campos reales, sea creando una tabla temporal con el resultado, o usando el resultado como tabla virtual de una subconsulta:
Código MySQL:
Ver original
  1. SELECT nombre
  2.     (SELECT CONCAT(`nombres`, ' ', `apaterno`, ' ', `amaterno`) nombre
  3.     FROM `people`) tabla
  4. WHERE nombre LIKE '%juan%';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: alias, condición, campos
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 14:04.