0

我想用以下方式写一个声明:

select attrib1, attrib2, attrib3, ...
from   table
where exists (
     select attrib1, attrib2 as foo, attrib3, ...
     from   table
     where  foo < attrib2
)

所以,我不允许使用点符号。这甚至可能吗?

编辑:
我描述的查询类似于关系代数中的半连接。我想将该列重命名attrib2为并从中选择foo每一列。tablefoo < attrib2

4

2 回答 2

2

您是指查询中的省略号吗?如果是这样,那不是标准 SQL 的一部分。您的查询的正确形式是:

select t.*
from   table t
where exists (
     select 1
     from   table t2
     where  t2.attrib2 < t.attrib2
)

尽管您应该看到 sgeddes 对替代公式的回答。

于 2013-05-30T20:19:56.923 回答
1

提到“点符号”:你的意思是不引用表格吗?如果是这样,为什么?

对于这个特定的查询,我相信它可以被重写为只使用一个子查询MAX

SELECT attrib1, attrib2
FROM table1 
WHERE attrib2 < (select max(attrib2) from table1)

考虑到EXISTS正在完成的工作,它会返回除具有最高 attrib2 的记录之外的所有记录。

于 2013-05-30T20:19:46.617 回答