2012-09-20 28 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 ... 

Oracle说ORA-00904: Unknown identifierp.column3。 我明白为什么它这么说 - 它不承认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