2012-05-10 26 views
0

我有以下表,表A,有一些数据T-SQL:左连接并返回一个空当没有加入由

ColA ColB 
0  5 
0  6 

我还有一个表,表B,有一些数据

ColC ColD ColE 
5  10  5 
5  15  10 
6  20  10 

ColC是ColB的外键。对于TableA中的每一行,我需要返回ColA,ColB和ColD。 TableB中要选择的行取决于通过参数设置的ColE的值。

例如:如果我的参数设置为5,我应该得到两排回如下:

ColA ColB ColD 
0  5  10 
0  6  null 

但是,如果我的参数以外的任何其他5和没有行TableB中存在,它使用参数值为5,并从ColB中检索值(如果存在行)。

我尝试了几件事情,但似乎无法提出解决方案。感谢您的帮助!

+1

我不明白你为什么shound得到0 6空为5的参数? – Paparazzi

回答

1

试试这个:

select ColA, ColB, ColD 
    from TableA a 
    left outer join TableB b on (a.ColB = b.ColC and b.ColE = 5) 
+0

这是正确的,但不幸的是我遗漏了一些东西。在上面的帖子中,我添加了“但是,如果我的参数不是5,而且TableB中不存在任何行,它将使用参数值5,并从ColB中检索值(如果存在行)。”因此,如果没有行存在5以外的参数值,那么我想回到5存在的行(如果存在的话)。抱歉。 – AndroidDev

0
select a.ColA, a.ColB, COALESCE(b.ColD, b5.ColD) 
    from TableA a 
    left outer join TableB b 
    on a.ColB = b.ColC 
    and b.ColE = 6 
    left outer join TableB b5 
    on a.ColB = b5.ColC 
    and b5.ColE = 5