2017-05-23 120 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