Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/08/2018, 02:49
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
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