【问题标题】:Design dataflow that accounts for AND clause in Left Outer Join设计考虑左外连接中 AND 子句的数据流
【发布时间】:2014-07-09 13:59:29
【问题描述】:

我有一个通过 SSIS 合并联接(左联接)进行的查询。它只连接在 ON 中指定的列。我该怎么做才能考虑使用 AND 的其他列?

SELECT Col1, Col2
FROM Table1
... many joins..
LEFT JOIN Table5 T5 ON T5.Col1 = T1.Col1
                    AND T5.Col2 = 'Y'
                    AND T5.Col3 = '1'
                    AND T5.Col4 <= T1.Col2
LEFT JOIN Table6 T6 ON T6.Col1 = T5.Col5
                    AND T6.Col2 LIKE '%DD%

这不能与 Merge-join 做吗?还有什么其他方法可以用来解决这个问题?我可以通过执行 SQL 来完成整个查询,但这不是我想要做的。

【问题讨论】:

  • 也许是 where 子句并使用 (T5.col2='Y' OR T5.col2 is null) AND (T5.Col3='1' OR t5.col3 is null) 之类的东西?弥补无法处理和连接的问题……但是,这对我来说听起来像是一个严重的工具限制。

标签: sql-server join ssis sql-server-2012 sql-server-2012-datatools


【解决方案1】:

只需按照您在问题中的条件即可。

AND T5.Col2 = 'Y'
AND T5.Col3 = '1'
AND T6.Col2 LIKE '%DD%

使用连接到来自 T5/T6 的数据的条件拆分,然后将条件拆分的输出连接到合并连接的左连接输入,这些很容易实现。

AND T5.Col4 <= T1.Col2

然而,这有点棘手,因为您无法在 Merge 连接中进行范围比较。 在不诉诸 T5 上的查找逻辑的情况下完成此操作的唯一方法是在执行合并连接时跳过此条件,并将合并连接的输出再次连接到条件拆分,并在其中的列之间进行比较以过滤掉不需要的行。

【讨论】:

  • 谢谢,我认为这是解决问题的充分办法。我不知道我可以对连接的 AND 值使用条件拆分。
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2012-05-28
  • 2015-11-25
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多