programing

Oracle 하위 쿼리에서 외부 블록 2단계 위쪽의 변수를 볼 수 없습니다.

lastcode 2023. 6. 16. 21:48
반응형

Oracle 하위 쿼리에서 외부 블록 2단계 위쪽의 변수를 볼 수 없습니다.

저는 게시물과 게시물과 관련된 첫 번째 의견을 한 번 문의하고 싶습니다.Postgre에서 제가 하는 방법은 다음과 같습니다.SQL:

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  

그리고 그것은 잘 작동합니다.

그러나 Oracle에서 ORA-00904 p.post _id: invalid identifier 오류가 발생합니다.

하나의 서브셀렉트에 대해서는 문제가 없을 것 같지만, 로넘(Oracle에서는 제한/오프셋 없음)을 사용해야 하기 때문에 하나의 서브셀렉트로는 코멘트를 받을 수 없습니다.

내가 여기서 뭘 잘못하고 있는 거지?

아니요.Oracle하나 이상의 깊이에 중첩된 하위 쿼리는 상관하지 않습니다(그리고 둘 다 상관이 없습니다.MySQL).

이것은 잘 알려진 문제입니다.

사용:

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

플랫폼에 의존하지 않는 SQL이 필요한 경우 다음과 같이 작동합니다.

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
        );

그러나 (post_id, created_date)가 주석의 기본 키라고 가정합니다.그렇지 않은 경우, 동일한 created_date를 가진 주석이 있는 두 개 이상의 줄 게시물을 받게 됩니다.

또한 Quassnoi가 제공하는 분석을 사용하는 솔루션보다 느릴 수 있습니다.

언급URL : https://stackoverflow.com/questions/2048244/oracle-subquery-does-not-see-the-variable-from-the-outer-block-2-levels-up

반응형