2016-05-16 96 views
0

我有一個類似於下面的查詢,我需要從另一個表中返回幾個字段作爲子查詢。有沒有一種方法我只能將查詢調用到TABLE2一次,並使用該查詢的結果來填充我需要的各個字段?我正在尋找類似於如何在LINQ中使用let語句的東西。謝謝。TSQL如何在子查詢中重用記錄

select 

(select field1 from TABLE2 where id = 1) as field1, 
(select field2 from TABLE2 where id = 1) as field2, 
(select field3 from TABLE2 where id = 1) as field3, 
(select field4 from TABLE2 where id = 1) as field4 

from mainTable where p1 = @p1 
+2

有幾種方法可以做到這一點。您可以使用cte,派生表或者很可能只需加入表格。但是,實現這一點的巨大榮譽並不是非常有效。 –

回答

1

我會用OUTER APPLY:

select 

x.field1 as field1, 
x.field2 as field2, 
x.field3 as field3, 
x.field4 as field4 

from mainTable as mt 
outer apply (select field1, field2, field3, field4 from TABLE2 where id = 1) as x 
where p1 = @p1 
0

您可以使用CROSS JOIN

select t.field1, t.field2, ... 
from mainTable 
cross join (select field1, field2, ... from TABLE2 where id = 1) as t 
where p1 = @p1 

我認爲在cross join操作中使用的子查詢返回一個記錄。

+0

如果'where id = 1'爲False或Unknown並且'其中p1 = @ p1'爲True,那麼原始查詢將返回至少一行,但此解決方案...不是。 –

+0

2行CROSS JOIN 0行= 0行 –

1

我認爲變量是最接近LINQ 條款。例如:

declare @field1 bigint; 
declare @field2 nvarchar(64); 

select @field1 = field1, @field2=field2 from TABLE2 where id = 1; 


select @field1, @field2, SomeOtherField from mainTable 
where p1 = @p1; 

當然,您需要設置適當類型的變量。