2017-04-17 12 views
1

私は、クエリの出力に対して自己内部結合を実行できるようにしたいと考えています。 INNER JOINを自己の実行、最も簡単な場合には、簡単です :SQL:INNER JOINの出力を自己参照する方法は?

SELECT * 
FROM A a1 INNER JOIN 
A a2 ON 
a1.key = a2.key 

問題は、私は、この自己インナーを行う必要があるということですが、他の内部の出力にに参加に参加。何かのように

SELECT * 

FROM DATA.A A INNER JOIN 
DATA.B B 
ON A.key = B.key output /* output is the dataset I am interested in */ 


INNER JOIN 

(FROM DATA.A A INNER JOIN 
DATA.B B 
ON A.key = B.key output2) /* same code to get output, so that I can self reference */ 

ON 
OUTPUT.key_alt = OUTPUT2.key_alt 

そうすることは可能ですか?私はoutputを私のデータベースに保存できません。 SQL Serverで

+2

mysqlまたはsql server? – SqlZim

+1

あなたができることはあなたが簡単にそれを読むことができるように出力選択文を解読することです。この段階で私はあなたが何をしたいかを理解できません – maSTAShuFu

+0

更新された質問。 –

答えて

1

私はこの種のもののためにcommon table expressionを使用することを好みます。それは物事を私の意見でより読みやすいものに保ちます。

with cte as (
    select * 
    from data.A as A 
    inner join data.B as B 
     on A.key = B.key 
) 
select ... 
from cte as o 
    inner join cte as i 
    on o.key = i.key 

これを実現するには、標準サブクエリを使用できます。

select o.* 
from (
    select * 
    from data.A as A 
    inner join data.B as B 
     on A.key = B.key 
) as o 
    inner join (
    select * 
    from data.A as A 
    inner join data.B as B 
     on A.key = B.key 
) as i 
    on o.key = i.key 
+0

本質的にこれは私がやったことですか? :D –

+1

@Noobieあなたの擬似コードで何をしようとしていたかのように見えます。あなたが実際の問題についてより詳細な情報を共有している場合は、これより簡単で適切な方法が他にもあります。 – SqlZim

+0

それは私のためにうまくいく、感謝! –