2016-08-25 36 views
1

晚报所有,复杂加入到返回超集

我一直在这一个了一段时间,由于某种原因,我似乎无法让我的逻辑返回我希望它的方式小打小闹。

我有3个数据表以及3个业务概念链接表。

  • 表1
  • 表2
  • 表3

规则:

  • 表1可以被链接到表2
  • 表1可以直接连接到工作台3
  • 表1 can b Ë间接通过表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不一定要有相关的商业概念。

The Return Expected is; 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 

希望它有帮助。