假设我们有两个表。
TabA(Acol1,Acol2,Acol3)
TabB(Bcol1,Bcol2.Ccol3)
要求就像是,在Acol1,Bcol1上连接两个表,如果Acol3 ='C',那么除了上面的连接之外,基于Acol2 = Bcol2连接。我们可以在单个SQL查询中进行此操作吗?加入是记录明智还是明智?
我可以使用的一个解决方案是使用Union,但我不认为这将是一个优化的解决方案。还有其他解决方案吗?
我想到的另一个解决方案
SELECT A.*,B.* FROM TabA A
INNER JOIN TabB B ON A.Acol1 = B.BCol1
and case when A.Acol3='C' then A.ACol2 else '1' end =
case when A.Acol3='C' then B.BCol2 else '1' end ;
没有案例和联盟的任何其他解决方案?
提前致谢
答案 0 :(得分:0)
on
条款:
select a.*, b.*
from tabA a join
tabB b
on a.col1 = b.col1 and
(a.col3 <> 'C' or a.col2 = b.col2);
注意:上面假设a.col2
不为空(如果需要,可以轻松包含该条件)。
您可能需要亲自制定一些示例,以确保or
方法等同于case
语句。
答案 1 :(得分:0)
如果您想加入TabA.col2,只有在C&#39; C&#39;那么在这种情况下,TabB.col2也将是&#39; C&#39;,因为你已经从col1加入了。因此,您的输出将与第一次加入时的输出相同。
select a.*, b.* from tabA a join tabB b
on a.col1=b.col1
这应该随时给你相同的输出。尝试在&#39; C&#39;的值上创建不同的场景。结果将始终是您第一次加入结果的子集。