2017-05-23 147 views
1

我已經運行了一個查詢,似乎正在帶回太多的列(是的,列,而不是行)。聲明低於T-SQL:查詢帶來太多的列

Select TOP 10 PERCENT 
     TempLegs.*, 
     TMWStateMilesByLeg.* 
From 
( 
    Select TOP 10 
     TempOrigin.stp_city as 'Origin Location' 
     from stops TempOrigin (NOLOCK) 
    Union 
    Select TOP 10 
     TempOrigin2.stp_city as 'Origin Location' 
     from stops TempOrigin2 (NOLOCK) 
) As TempLegs,TMWStateMilesByLeg 

當我運行這個說法,我的結果集是不是「原點位置」的一列,而是列出了所有從站表中的列。這裏發生了什麼?

,我能想到的唯一的事情是,

由於TempLegs,TMWStateMilesByLeg

語句走樣的加入兩片,但我不知道,因爲我已經從來沒有在AS聲明中看到兩個術語。

任何幫助,非常感謝。

+0

的點星級符號使用的是告訴T-SQL來顯示給定表的所有列。所以TempLegs。*會爲你提供你想要的單個列,但是「TMWStateMilesByLeg。*」也會給你這個表中的每一列(我不知道它是什麼或者它是如何影響你的查詢的) 。 – Stilgar

回答

3

這是舊式連接。

Select TOP 10 PERCENT /* <-- top without order by */ 
    TempLegs.* 
     --,TMWStateMilesByLeg.* 
From ( 
    Select TOP 10 /* <-- top without order by */ 
     TempOrigin.stp_city as 'Origin Location' 
     from stops TempOrigin --(NOLOCK) 
    Union /* <-- union instead of union all will return distinct results */ 
    Select TOP 10 /* <-- top without order by */ 
     TempOrigin2.stp_city as 'Origin Location' 
     from stops TempOrigin2 --(NOLOCK) 
) As TempLegs --,TMWStateMilesByLeg 

參考:(。*)

+0

我的天啊。謝謝你,我從來沒有想過這件事。順便說一下,我沒有寫這個SQL,我偶然發現它試圖調和另一個系統的數字。是的,NOLOCK無處不在! –

+0

@FlexFiend樂於幫忙! – SqlZim