4

我已经挣扎SQL了一段时间了。我必须构建一个查询以从表中返回第二高的 id。听起来很简单,尤其是当您找到该链接时。

但我有一个更复杂的查询:

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 identifier at p.column3. 我理解它为什么这么说 - 它不能识别p为表名别名。

是否可以将其传递给嵌套查询?

4

1 回答 1

0

您不能将查询中的列传递给嵌套查询的嵌套查询。

我认为这可以做同样的工作:

    选择
      p.column1,
      p.column2,
      p.column3,
      p.column4,
      (
        选择
          p.column1
        从
          p_table p
        在哪里
          (p.column2, 2) = (SELECT id,
                                   RANK() OVER (ORDER BY id DESC) rank_id
                              从
                                    其他表
                             在哪里
                                    字段 = p.column3
                             )

        ) 作为某事
    从

于 2012-09-20T19:23:17.393 回答