SQL-在嵌套选择中使用值

问题描述

| 希望标题具有某种意义-我基本上想根据原始选择中的值进行嵌套选择,如下所示:
SELECT MAX(iteration) AS maxiteration,(SELECT column
        FROM   table
        WHERE  id = 223652
               AND iteration = maxiteration)
FROM   table
WHERE  id = 223652;  
我收到ORA-00904无效标识符错误。 非常感谢有关如何返回此值的任何建议,谢谢!     

解决方法

看起来应该用where子句重写:
select iteration,col
from tbl
where id = 223652
and iteration = (select max(iteration) from tbl where id = 223652);
    ,您可以将子选择放置在其自身的一个“ 2”中,从而共同解决该问题。
SELECT t.iteration,t.column
FROM   table t
       INNER JOIN (
         SELECT id,MAX(iteration) AS iteration
         FROM   table
         WHERE  id = 223652
       ) tm ON tm.id = t.id AND tm.iteration = t.iteration
    ,由于您使用的是Oracle,因此建议您使用分析功能:
SELECT * FROM (
    SELECT col,iteration,row_number() over (partition by id order by iteration desc) rn
    FROM tab
    WHERE  id = 223652
) WHERE rn = 1
    ,像这样做:
with maxiteration as
(
    SELECT MAX(iteration) AS maxiteration
    FROM   table
    WHERE  id = 223652
)
select
    column,iteration
from
    table
where
    id = 223652
    AND iteration = maxiteration
;
    ,无法100%确定Oracle语法,但不是这样的:
select iteration,column from table where id = 223652 order by iteration desc limit 1
    ,我将以略有不同的方式解决此问题。您基本上是在寻找没有其他迭代大于该行的行。我至少可以想到3种方法:
SELECT
    T1.iteration AS maxiteration,T1.column
FROM
    Table T1
WHERE
    T1.id = 223652 AND
    NOT EXISTS
    (
        SELECT *
        FROM Table T2
        WHERE
            T2.id = 223652 AND
            T2.iteration > T1.iteration
    )
要么...
SELECT
    T1.iteration AS maxiteration,T1.column
FROM
    Table T1
LEFT OUTER JOIN Table T2 ON
    T2.id = T1.id AND
    T2.iteration > T1.iteration
WHERE
    T1.id = 223652 AND
    T2.id IS NULL
要么...
SELECT
    T1.iteration AS maxiteration,T1.column
FROM
    Table T1
INNER JOIN (SELECT id,MAX(iteration) AS maxiteration FROM Table T2 GROUP BY id) SQ ON
    SQ.id = T1.id AND
    SQ.maxiteration = T1.iteration
WHERE
    T1.id = 223652
编辑:第一次阅读问题时我没有看到ORA错误,并且没有将其标记为Oracle特定。我认为Oracle别名的语法和用法可能有所不同,因此您可能需要调整一些上述查询。 Oracle错误告诉您它不知道什么是最大化,因为在子查询中列别名尚不可用。您需要通过表别名和列名而不是我相信的列别名来引用它。     ,你做类似的事情
select maxiteration,column from table a join (select max(iteration) as maxiteration from table where id=1) b using (id) where b.maxiteration=a.iteration;
当然,这可能会返回一个最大化的多行,除非您的表对此有约束。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...