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

Alias multiple

Estas en el tema de Alias multiple en el foro de Mysql en Foros del Web. Hola a todos, Estoy intentando hacer un select de este modo: Código PHP: SELECT     id ,     ( SELECT c FROM tabla1 WHERE w = ids . id  and  r = ...
  #1 (permalink)  
Antiguo 25/03/2011, 13:54
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años
Puntos: 19
Alias multiple

Hola a todos,

Estoy intentando hacer un select de este modo:

Código PHP:
SELECT
    id
,
    (
SELECT c FROM tabla1 WHERE w=ids.id and r='tom') as as_1,
    (
SELECT c FROM tabla2 WHERE w=ids.id and r='jerry') as as_1
    FROM ids where
    
(type='tom' OR type='jerry' )
    
order by as_1 
Este select no funciona correctamente, ya que el alias "as_1" siempre consiste en la segunda subconsulta, traiga o no contenido. Es decir, que si la primera subconsulta trae contenido y la segunda no el alias "as_1" trae NULL.

¿Como podria hacer ordenar alfabeticamente este select por el resultado de estas dos subconsultas juntas?
  #2 (permalink)  
Antiguo 25/03/2011, 16:31
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: Alias multiple

Hay varios problemas:
1) Estás usando palabras reservadas como nombres de columnas (type, por ejemplo) y eso puede dar lugar a resultados erráticos.
2) Estás poniendolé a dos columnas el mismo alias, lo que debería darte error, pero aún si lo puedes usar, estás tratando que te ordene por un alias... que corresponde a dos columnas distintas. Eso no es razonable.
3) Estás usando subconsultas para columnas de un SELECT, lo que resulta sumamente ineficiente, ya que se ejecutan una vez por cada valor devuelto en la consulta principal, y además una vez por cada columna...

Ese tipo de consulta se resuelve de otro modo, por ejemplo:
Código MySQL:
Ver original
  1.   id,
  2.   IF(T1.r = 'tom', T1.c '') as_1,
  3.   if(T2.r='jerry', T2.c, '') as_2
  4.   ids I
  5.   INNER JOIN tabla1 T1 ON T1.w = I.id
  6.   INNER JOIN tabla2 T2 ON T2.w = I.id
  7.   `type` IN ('tom','jerry')
  8. ORDER BY as_1, as_2;
__________________
¿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/03/2011, 10:40
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años
Puntos: 19
Respuesta: Alias multiple

Hola,

Bufff... de lujo tu respuesta. Me ha enseñado mucho, me ha resuelto tu select un monton.


Gracias.

Etiquetas: alias
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 11:34.