SQL Server:如何在不使用点表示法的情况下执行半连接?

时间:2013-05-30 20:07:27

标签: sql sql-server

我想以下列方式撰写声明:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

虽然你应该看到sgeddes的替代配方的答案。

答案 1 :(得分:1)

参考&#34;点符号&#34;:你的意思是不参考表格吗?如果是这样,为什么?

对于这个特定的查询,我相信可以重写它只是使用带有MAX的子查询:

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

考虑到EXISTS正在完成的事情,它会返回所有记录,除了那些具有最高attrib2的记录。