Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Oracle (http://www.forosdelweb.com/f100/)
-   -   Subconsulta (http://www.forosdelweb.com/f100/subconsulta-548645/)

pendejo1983 16/01/2008 05:53

Subconsulta
 
Hola,

os comento mi problema a ver quien sabe como puede hacerse.

Tengo una consulta que me llegará como incógita

Yo de esa consulta (que desconoceré cuando me llegue) quiero obtener por ejemplo los elementos del 51 al 100

He pensado en:

select SUBC.*
from (subconsultaQueMeLLegue) SUBC
where ROWNUM between 51 and 100

Pero me dice que ese * es ambiguo ¿como podría hacerlo? (desconozco los nombres de las columnas que llegarán en la subconsulta)

Gracias por adelanto

Linterns 16/01/2008 21:54

Re: Subconsulta
 
Lastimosamente en oracle no puedes hacer un "*" de una subconslta utilizando el rownum ya que no sabe si te refieres a la principal o al rownum de la subconsulta asi que dicha subconsulta deberas obtener el rownum y cambiarle a una variable ej:
Código PHP:

 select *
 
from
 
(select  rownum as minumerocampo1campo2 
 from tabla
 order by campo1 desc
)
 
where minumero>= 51
 
and minumero <= 100


pendejo1983 17/01/2008 03:08

Re: Subconsulta
 
gracias Linterns

Suponiendo que a la subconsulta (que recordemos desconozco) pudiese añadirle en el select el rownum para poder hacer el where y quedarme sólo con las filas que quiero... el problema lo tengo en el select * ya que me dice que es ambiguo

Por ejemplo:

(subconsulta que desconozco)
select p.descripcion, se.descripcion
from producto p, serie se

(lo que quiero aplicarle)

select *
from (select rownum fila, p.descripcion, se.descripcion
from producto p, serie se)
where fila between 51 and 100

Ese select * me dice que es ambiguo -> ORA-00918: column ambiguously defined


¿existe alguna manera de hacerlo?

Gracias por adelantado

jcamt 24/01/2008 08:57

Re: Subconsulta
 
lo mejor es cambiar el SQL por inner join de la siguiente manera

select * from tabla1 INNER JOIN tabla2 ON tabla1.campo1 = tabla2.campo1

si no le funciona asi entonces hay una forma muy rustica pero sirve

select llave_primaria from tabla1 where rownum < (el interval que quera)

vuelve a hacer el select con los campos que necesita, pero le coloca la condicion de que las llaves primarias de la tabla NOT IN el select anterior, y aparte le coloca el segundo intervalo de rownum < (el segundo intervalo)


La zona horaria es GMT -6. Ahora son las 12:11.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.