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

Subconsulta

Estas en el tema de Subconsulta en el foro de Oracle en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 16/01/2008, 05:53
 
Fecha de Ingreso: noviembre-2007
Mensajes: 163
Antigüedad: 17 años
Puntos: 0
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
  #2 (permalink)  
Antiguo 16/01/2008, 21:54
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 11 meses
Puntos: 11
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
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #3 (permalink)  
Antiguo 17/01/2008, 03:08
 
Fecha de Ingreso: noviembre-2007
Mensajes: 163
Antigüedad: 17 años
Puntos: 0
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
  #4 (permalink)  
Antiguo 24/01/2008, 08:57
 
Fecha de Ingreso: marzo-2007
Mensajes: 3
Antigüedad: 17 años, 8 meses
Puntos: 0
Exclamación 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)
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 10:18.