Buenas tardes,
Aqui va la pregunta: Supongase la siguiente consulta, que asi es como esta
actualmente (los nombres de tabla y campos no son reales). Las tablas
tabla1, tabla3 y tabla4 tienen un campo que se llama igual en las 3 pero el
contenido puede ser diferente
select
t1.clave, t1.campo1, t1.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla3 t3
on t1.clave = t3.clave
where <condiciones>
UNION
select
t1.clave, t1.campo1, t1.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla4
on t1.clave = t4.clave
where <condiciones>
group by t1.clave, t1.campo1, t1.descripcion
order by t1.clave, t1.campo1, t1.descripcion
Ahora bien, en la consulta se necesita que en vez de mostrar t1.descripcion
se pueda mostrar t3.descripcion o t4.descripcion según sea el caso; es
decir:
select
t1.clave, t1.campo1, t3.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla3 t3
on t1.clave = t3.clave
where <condiciones>
UNION
select
t1.clave, t1.campo1, t4.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla4
on t1.clave = t4.clave
where <condiciones>
El problema es que entonces se genera un error por el group by y el order
by:
Si coloco:
group by t1.clave, t1.campo1, t3.descripcion
order by t1.clave, t1.campo1, t3.descripcion
Se produce el error:
El prefijo de columna 't3' no coincide con un nombre de tabla o con un
alias usado en la consulta.
Si lo cambio a t4 da el mismo error.
Si le quito el prefijo da un error de columna ambigua,
Si no coloco ninguno da un error de La columna 't4.descripcion' de la lista
de selección no es válida, porque no está contenida en una función de
agregado ni en la cláusula GROUP BY.
Si dejo el de t1 dice que debe haber elementos ORDER BY en la lista de
selección si la instrucción contiene el operador UNION.
En fin que parece un cuento de nunca acabar.
Bueno saludos, disculpen lo largo del mensaje y gracias por su respuesta.
*** Ygnacio Durán ***
Leer las respuestas