Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Oracle

Respuesta
 
Herramientas Desplegado
Antiguo 16-ene-2008, 04:53   #1 (permalink)
pendejo1983 ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 34
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
pendejo1983 está desconectado   Responder Citando
Antiguo 16-ene-2008, 20:54   #2 (permalink)
Colaborador
Linterns tiene algunos puntos positivos de karma
 
Avatar de Linterns
 
Fecha de Ingreso: noviembre-2002
Mensajes: 2.803
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
** ***
Linterns está desconectado   Responder Citando
Antiguo 17-ene-2008, 02:08   #3 (permalink)
pendejo1983 ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 34
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
pendejo1983 está desconectado   Responder Citando
Antiguo 24-ene-2008, 07:57   #4 (permalink)
jcamt ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2007
Mensajes: 2
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)
jcamt está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 21:51.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93