复杂加入 Return SuperSet
Complex Join to Return SuperSet
晚安,
我一直在研究这个问题有一段时间了,出于某种原因,我似乎无法按照我期望的方式使我的逻辑 return。
我有 3 个数据 table 以及 3 个业务概念链接 table。
- Table1
- Table2
- Table3
规则:
- Table1可以链接到Table2
- Table1可以直接挂table3
- Table 1 可以通过 table 2
间接链接到 table 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
解释起来有点尴尬,但总结一下
我需要 Table 1 的所有数据
只有 Tables 2 和 3 中的数据如果它们 directly/indirectly 与 table 1 相关。 Tables 2 和 3 不一定必须有相关业务概念。
预期的Return是;
如有任何帮助,我们将不胜感激
你是对的。事情没那么简单。但是我可以通过以下查询获得所需的输出
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
希望对您有所帮助。
晚安,
我一直在研究这个问题有一段时间了,出于某种原因,我似乎无法按照我期望的方式使我的逻辑 return。
我有 3 个数据 table 以及 3 个业务概念链接 table。
- Table1
- Table2
- Table3
规则:
- Table1可以链接到Table2
- Table1可以直接挂table3
- Table 1 可以通过 table 2 间接链接到 table 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
解释起来有点尴尬,但总结一下 我需要 Table 1 的所有数据 只有 Tables 2 和 3 中的数据如果它们 directly/indirectly 与 table 1 相关。 Tables 2 和 3 不一定必须有相关业务概念。
预期的Return是;
你是对的。事情没那么简单。但是我可以通过以下查询获得所需的输出
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
希望对您有所帮助。