2017-03-22 2 views
0

そこで質問です:上記の例で再利用の回数がメインクエリの列の完全なリストでない場合、サブクエリを再利用する方法はありますか?

select 

column1, 
column2, 
(select column_x from anotherTable with conditionsDerived) as column3, 
(select column_y from anotherTable with conditionsDerived) as column4 

from mainTable 
where conditions; 

、列がCOLUMN3とcolumn4は、同じクエリが2回使用されているため。私は時間が2倍かかると信じて、私はそれを避けたい。 column1とcolumn2が存在しなかった場合、それを処理する方法を知っています。重要な点はconditionsDerivedがmainTableからの現在のクエリに基づいていることです。つまり、スタンドアロンクエリではありません。 mainTableの少なくとも1つの列に依存します。

答えて

3

私はあなたのクエリが本当に相関サブクエリであることを前提としています。その場合は、「横方向結合」を使用することができます。 SQL Serverでは、これはouter applyを用いて達成される:

select t.column1, t.column2, 
     an.column_x as column3, an.column_y as column4 
from mainTable t outer apply 
    (select column_x, column_y 
     from anothertable an 
     where . . . 
    ) an 
where conditions; 

Applyfrom句で相関サブクエリを持つようなものです。しかしそれは良いです。 。 。副問合せは複数の列および/または複数の行を戻すことができます。

クエリが関連付けられていない場合でも、applyを使用できます。しかし、cross joinも同様に使用できます。

+0

それは素晴らしいです!ありがとう!できます! – anupamb

0

パフォーマンスを向上させ、より読みやすいコードを作成できるWITH節を使用できます。

この記事はあなたを助けることができる:

https://oracle-base.com/articles/misc/with-clause

http://modern-sql.com/feature/with

+0

OPがMS SQL Serverを使用していることを示すと、なぜオラクルのように投稿しますか? –

+0

WITH節の恩恵の参考にして、WITH句はSQL:1999標準の一部であるため、SQL Serverではこれを使用する方法を例として示します。 – aaroncio

0

は、クエリに参加STDを使用します。

select  table1.id, 
      table1.column_1, 
      table1.column_2, 
      table2.column_3, 
      table2.column_4 
from  table1 
inner join table2 
on   table1.id = table2.id 
where  table2.field_x = table2.conditions 
and  table1.field_y = table1.conditions; 
関連する問題