transponer tipos subconsultas registros procedimiento funciones ejemplos ejecutar developer consultas comandos columnas almacenado sql oracle ora-00904

tipos - pl sql ejemplos



La subconsulta de Oracle no ve la variable desde el bloque externo 2 niveles hacia arriba (2)

Me gustaría obtener en una consulta una publicación y el primer comentario asociado con la publicación. Así es como lo hago en PostgreSQL:

SELECT p.post_id, (select * from (select comment_body from comments where post_id = p.post_id order by created_date asc) where rownum=1 ) the_first_comment FROM posts p

y funciona bien.

Sin embargo, en Oracle me aparece un error ORA-00904 p.post_id: identificador no válido.

Parece que funciona bien para una subselección, pero no puedo obtener el comentario con solo una debido al hecho de que necesito usar rownum (sin límite / compensación en Oracle).

¿Qué estoy haciendo mal aquí?


No, Oracle no correlaciona las subconsultas anidadas en más de un nivel de profundidad (y tampoco lo hace MySQL ).

Este es un problema bien conocido.

Utilizar esta:

SELECT p.post_id, c.* FROM posts JOIN ( SELECT c.*, ROW_NUMBER() OVER (PARTITION BY post_id ORDER BY created_date ASC) AS rn FROM comments c ) c ON c.post_id = p.post_id AND rn = 1


Si necesita SQL que sea independiente de la plataforma, esto funcionará:

SELECT p.post_id , c.comment_body FROM posts p , comments c WHERE p.post_id = c.post_id AND c.created_date IN ( SELECT MIN(c2.created_date) FROM comments c2 WHERE c2.post_id = p.post_id );

Pero asume que (post_id, created_date) es la clave principal de los comentarios. Si no lo es, obtendrás más de una línea de publicaciones que tienen comentarios con la misma fecha de creación.

Además, es probable que sea más lenta que la solución que utiliza análisis, dada por Quassnoi.