2013-05-30 46 views
0

我想通過以下方式來寫一個聲明: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中選擇各列。

+9

你是什麼意思,你不允許使用點符號? –

+3

不尋常的選擇'EXISTS'中的特定列。 – HABO

+0

您是否問如何在不引用別名的情況下編寫相關子查詢? – HABO

回答

1

提到「點符號」:你的意思是不引用表?如果是這樣,爲什麼?

對於這個特定的查詢,我相信它可以被改寫爲只使用一個子查詢與MAX

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

考慮什麼EXISTS被完成,它返回的所有記錄,除了那些具有最高attrib2。

2

你的意思是在查詢中的省略號?如果是這樣,那不是標準SQL的一部分。您的查詢的正確形式是:

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

雖然您應該看到sgeddes的替代公式的答案。

+0

+1重讀這個問題,很好的可能是OP的結果。點符號 - 來吧,更多細節! – sgeddes

+2

選擇*不應該用於生產代碼,他應該列出他需要的每一列,只列出他需要的列。 – HLGEM

相關問題