Join 返回超集的复杂连接
晚上好 我已经花了一段时间在这个问题上,出于某种原因,我似乎无法让我的逻辑回到我期望的方式 我有3个数据表以及3个业务概念链接表Join 返回超集的复杂连接,join,sql-server-2012,data-warehouse,data-vault,Join,Sql Server 2012,Data Warehouse,Data Vault,晚上好 我已经花了一段时间在这个问题上,出于某种原因,我似乎无法让我的逻辑回到我期望的方式 我有3个数据表以及3个业务概念链接表 表1 表2 表3 规则: 表1可以链接到表2 表1可以直接链接到表3 表1可以通过表2间接链接到表3 我已经尝试了相当多的变化,但它似乎截断记录 SELECT * FROM Table1 T1 INNER JOIN Table1_to_Table2_Link L1 on L1.T1_ID = T1.I
- 表1
- 表2
- 表3
- 表1可以链接到表2
- 表1可以直接链接到表3
- 表1可以通过表2间接链接到表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
解释起来有点尴尬,但在艺术方面
我需要表1中的所有数据
仅表2和表3中与表1直接/间接相关的数据。表2和表3不一定要有相关的业务概念
预期收益为强>
任何帮助都将不胜感激您是对的。事情并不是那么简单。然而,我可以通过下面的查询获得所需的输出
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
希望有帮助。使用左键连接而不是右键连接。如果这么简单,我可能会把头撞到桌子上。金球明星。。。。早上我进去的时候会试试。:-)使用左连接而不是内部连接和右连接应该会有帮助,因为这样可以确保保留表1中的所有行