2016-08-25 1 views
1

イブニングすべてを返すように入会します。コンプレックスは、私はしばらくの間、私はちょうど私がそれをすることを期待する方法を返すように私のロジックを取得するように見えることはできませんいくつかの理由で、この1で離れてチッピングされている</p> <p>、スーパーセット

私は3つのデータテーブルと3つのビジネスコンセプトのリンクテーブルを持っています。

  • 表1
  • 表2
  • 表3

ルール:

  • 表1、表2
  • 表1にリンクすることができ、直接表3
  • に連結することができます
  • 表1はb eは、間接的に、私はレコードを切り捨てているようだが、公正いくつかのバリエーションを試してみましたが、2

TableStructures テーブルを経由して表3にリンクされています。

SELECT 
    * 
FROM 
      Table1   T1 
INNER JOIN Table1_to_Table2_Link L1 on L1.T1_ID = T1.ID 
RIGHT JOIN TABLE2   T2 ON L1.T2_ID = T2.ID 
INNER JOIN Table2_to_Table3_Link L2 ON L2.T2_ID = T2.ID 
Right JOIN Table3   T3 ON L2.T3_ID = T3.ID 
INNER JOIN Table1_to_Table3_Link L3 on T1.ID = L3.T1_ID 

その説明が少しぎこちないが、summart に私は表1 からすべてのデータが必要なデータのみを表2および3で、彼らは直接/間接的に表1、表2及び3に関連している場合必ずしも関連するビジネスコンセプトを持つ必要はありません。

返品予定は、 enter image description here ご協力いただければ幸いです。

+0

右結合の代わりに左結合を使用します。 –

+0

それは単純な私はおそらく机の上に私の頭を強打するつもりです。 Kimball Stars ....私が入ると、朝に行くよ。 – Merenix

+2

:-)内部結合と右結合の両方ではなく、左結合を使用すると、テーブル1からすべての行を確実に保持するのに役立ちます –

答えて

2

あなたは正しいです。それはそれほど単純ではありませんでした。しかし、私は以下のクエリで希望の出力を得ることができました

SELECT 
T1.*, 
T2.*, 
T3.* 
FROM 
     Table1 T1 
LEFT JOIN Table1_to_Table2_Link L1 on T1.ID = L1.T1_ID 
LEFT JOIN TABLE2   T2 ON T2.ID = L1.T2_ID 
LEFT JOIN (
    SELECT T1_ID AS ID,T3_ID AS table3Id FROM dbo.Table1_to_Table3_Link 
    UNION ALL 
    SELECT T2_ID AS ID,T3_ID AS table3Id FROM dbo.Table2_to_Table3_Link 
    ) S 
    ON T1.ID = s.ID 
    OR t2.ID = s.id 
LEFT JOIN dbo.Table3 T3 ON S.table3Id = T3.ID 

希望すると助かります。

関連する問題

 関連する問題