2012-09-20 3 views
4

나는 잠시 동안 SQL으로 고생했습니다. 테이블에서 두 번째로 높은 ID를 반환하는 쿼리를 작성해야합니다. 특히, that link을 찾은 경우 간단하게 들립니다.SQL에서 테이블 별칭을 하위 서브 쿼리에 전달하는 방법은 무엇입니까?

SELECT 
    p.column1, 
    p.column2, 
    p.column3, 
    p.column4, 
    (
    SELECT 
     p.column1 
    FROM 
     p_table p 
    WHERE 
     p.column2 = (
     SELECT 
      id 
     FROM (
      SELECT 
      id, 
      RANK() OVER (ORDER BY id DESC) rank_id 
      FROM 
      other_table 
      WHERE 
      field = p.column3 
     ) 
     WHERE 
      rank_id = 2 
    ) 
    ) AS sth 
FROM ... 

오라클은 p.column3에서 ORA-00904: Unknown identifier 말한다 :

는하지만 조금 더 복잡한 쿼리가 있습니다. 나는 그것이 왜 그렇게 말하고 있는지 이해한다. 테이블 이름 별칭으로 p을 인식하지 못한다.

중첩 쿼리에 전달할 수 있습니까?

답변

0

중첩 된 쿼리의 중첩 쿼리로 쿼리의 열을 전달할 수 없습니다.

나는이 같은 일을 할 수 있다고 생각 :

 

    SELECT 
     p.column1, 
     p.column2, 
     p.column3, 
     p.column4, 
     (
     SELECT 
      p.column1 
     FROM 
      p_table p 
     WHERE 
      (p.column2, 2) = (SELECT id, 
            RANK() OVER (ORDER BY id DESC) rank_id 
           FROM 
            other_table 
          WHERE 
            field = p.column3 
          ) 

     ) AS sth 
    FROM 

+0

불행하게도, 그것은 – maialithar

+0

작동하지 않습니다 왜하지 도다? – Laggel