2016-05-16 6 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

が適用されます。

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操作で使用されるサブクエリは正確に一つのレコードを返すことを想定しています。私はOUTERを使用する

+0

'where id = 1'がFalseまたはUnknownで、' p1 = @ p1'がTrueの場合、元のクエリは少なくとも1行を返しますが、この解決策はありません。 –

+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; 

あなたは変数の適切なタイプを設定する必要があります。

関連する問題