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

Como usar ORDER BY con UNION ALL

Estas en el tema de Como usar ORDER BY con UNION ALL en el foro de PostgreSQL en Foros del Web. Tengo dos tablas, que de forma simplificada son así: TABLA conceptos ( id integer NOT NULL, codigo character varying(20), CONSTRAINT "Concpetos_pkey" PRIMARY KEY (id) ) ...
  #1 (permalink)  
Antiguo 27/08/2018, 02:49
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Como usar ORDER BY con UNION ALL

Tengo dos tablas, que de forma simplificada son así:
TABLA conceptos
(
id integer NOT NULL,
codigo character varying(20),
CONSTRAINT "Concpetos_pkey" PRIMARY KEY (id)
)

TABLA relacion
(
id integer NOT NULL,
id_padre integer,
id_hijo integer,
cantidad numeric(7,3),
posicion smallint
CONSTRAINT "Relacion_pkey" PRIMARY KEY (id)
)


La tabla relación sirve para crear una estructura de arbol en la que se alojan los conceptos de la primera tabla.
Quiero hacer una consulta de forma que me muestre el concepto padre y luego los hijos que penden de él, y que estos estén ordenados por medio de la columna "posicion"

Esto me funciona:

Código SQL:
Ver original
  1. SELECT  conceptos.codigo   
  2.  FROM conceptos,relacion
  3.  WHERE conceptos.id = 7
  4.  AND relacion.id_padre = 11
  5.  AND relacion.id_hijo = conceptos.id
  6.  UNION ALL
  7. SELECT  conceptos.codigo   
  8.  FROM conceptos,relacion
  9.  WHERE relacion.id_padre = 7
  10.  AND conceptos.id = relacion.id_hijo

Pero no me deja añadir una clausula ORDER BY:
Código SQL:
Ver original
  1. SELECT  conceptos.codigo   
  2.  FROM conceptos,relacion
  3.  WHERE conceptos.id = 7
  4.  AND relacion.id_padre = 11
  5.  AND relacion.id_hijo = conceptos.id
  6.  UNION ALL
  7. SELECT  conceptos.codigo   
  8.  FROM conceptos,relacion
  9.  WHERE relacion.id_padre = 7
  10.  AND conceptos.id = relacion.id_hijo
  11.  ORDER BY relacion.posicion --ESTO ME DA ERROR


ERROR: missing FROM-clause entry for table "relacion"
LINE 11: ORDER BY relacion.posicion
^

********** Error **********

ERROR: missing FROM-clause entry for table "relacion"
SQL state: 42P01
Character: 280


Muchas gracias por adelantado
__________________
Mi calculadora en Qt
  #2 (permalink)  
Antiguo 27/08/2018, 13:13
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Como usar ORDER BY con UNION ALL

Para que el ordenamiento tenga efecto en UNION ALL deben ser columnas que estén plasmadas en las consultas respectivas.

Por ejemplo:
Código SQL:
Ver original
  1. SELECT  conceptos.codigo,relacion.posicion    
  2.  FROM conceptos,relacion
  3.  WHERE conceptos.id = 7
  4.  AND relacion.id_padre = 11
  5.  AND relacion.id_hijo = conceptos.id
  6.  UNION ALL
  7. SELECT  conceptos.codigo,relacion.posicion    
  8.  FROM conceptos,relacion
  9.  WHERE relacion.id_padre = 7
  10.  AND conceptos.id = relacion.id_hijo
  11.  ORDER BY relacion.posicion
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/08/2018, 13:56
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: Como usar ORDER BY con UNION ALL

Cita:
Iniciado por huesos52 Ver Mensaje
Para que el ordenamiento tenga efecto en UNION ALL deben ser columnas que estén plasmadas en las consultas respectivas.

Por ejemplo:
Código SQL:
Ver original
  1. SELECT  conceptos.codigo,relacion.posicion    
  2.  FROM conceptos,relacion
  3.  WHERE conceptos.id = 7
  4.  AND relacion.id_padre = 11
  5.  AND relacion.id_hijo = conceptos.id
  6.  UNION ALL
  7. SELECT  conceptos.codigo,relacion.posicion    
  8.  FROM conceptos,relacion
  9.  WHERE relacion.id_padre = 7
  10.  AND conceptos.id = relacion.id_hijo
  11.  ORDER BY relacion.posicion

Hola:

Gracias por responder. El caso es que no me funciona.
He probado esto y funciona, pero no lo veo muy correcto:

Código SQL:
Ver original
  1. SELECT  conceptos.codigo,relacion.posicion    
  2.      FROM conceptos,relacion
  3.      WHERE conceptos.id = 7
  4.      AND relacion.id_padre = 11
  5.      AND relacion.id_hijo = conceptos.id
  6.      UNION ALL
  7.     SELECT  * FROM (SELECT conceptos.codigo,relacion.posicion    
  8.      FROM conceptos,relacion
  9.      WHERE relacion.id_padre = 7
  10.      AND conceptos.id = relacion.id_hijo ORDER BY relacion.posicion) AS t
__________________
Mi calculadora en Qt
  #4 (permalink)  
Antiguo 27/08/2018, 14:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Como usar ORDER BY con UNION ALL

Prueba esto:
Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3. (
  4. SELECT  conceptos.codigo,relacion.posicion    
  5.  FROM conceptos,relacion
  6.  WHERE conceptos.id = 7
  7.  AND relacion.id_padre = 11
  8.  AND relacion.id_hijo = conceptos.id
  9.  UNION ALL
  10. SELECT  conceptos.codigo,relacion.posicion    
  11.  FROM conceptos,relacion
  12.  WHERE relacion.id_padre = 7
  13.  AND conceptos.id = relacion.id_hijo
  14. ) AS t
  15. ORDER BY 2;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 28/08/2018, 01:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: Como usar ORDER BY con UNION ALL

Cita:
Iniciado por huesos52 Ver Mensaje
Prueba esto:
Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3. (
  4. SELECT  conceptos.codigo,relacion.posicion    
  5.  FROM conceptos,relacion
  6.  WHERE conceptos.id = 7
  7.  AND relacion.id_padre = 11
  8.  AND relacion.id_hijo = conceptos.id
  9.  UNION ALL
  10. SELECT  conceptos.codigo,relacion.posicion    
  11.  FROM conceptos,relacion
  12.  WHERE relacion.id_padre = 7
  13.  AND conceptos.id = relacion.id_hijo
  14. ) AS t
  15. ORDER BY 2;
Hola:

Muchas gracias por el aporte y tu atención. El caso es que no es exactamente lo que necesito ya que en mi salida primero ha de aparecer el nodo padre, y luego los hijos ordenados. La consulta que me propones ordena todos los elementos, y no me interesa que el nodo padre sea ordenado.

Muchas gracias de nuevo
__________________
Mi calculadora en Qt

Etiquetas: order, union, usar
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 04:10.