2014-03-13 94 views
1

我需要在以下情况下SQL服务器加入

Table One 
Col A 
Col B 
Col C1 
Col C2 
Col C3 

Table Two 
Col C 
Col D 

我需要加入[一]与[二],并得到One.A和Two.D作为我的输出连接两个表的帮助。

这里是连接逻辑:

加入[一] .C1 = [二] .C如果不匹配,我需要加入[大]≥C2 = Two.C如果再没有匹配加盟[大]≥C3 = [二] .C

+0

什么是你的多行预期具有相同的'One.A'和'Two.D'值?你想看重复吗?让他们分组在一起? – DMason

+0

@DMason我希望他们分组在一起。 – user3416602

回答

2

您需要COALESCE()

SELECT DISTINCT 
    COALESCE(One1.A, One2.A, One3.A) AS A, 
    D 
FROM 
    Two 
    LEFT JOIN One AS One1 ON 
     Two.C = One1.C1 
    LEFT JOIN One AS One2 ON 
     Two.C = One2.C2 
    LEFT JOIN One AS One3 ON 
     Two.C = One3.C3; 
+0

这个任务可以通过只使用一个连接完成。看到我的答案。 – unknown

0

尝试此查询:

SELECT 
one.A as oneA, 
two.D as twoD 
FROM 
One one 
INNER JOIN Two two ON one.C1 = two.C 
OR one.C1 = two.C2 
OR one.C3 = two.C; 
+0

这样做的问题是,如果有多个匹配项,就会得到多行,例如一行中的C1与另一行中的C2相同。 –

+0

我不这么认为。见http://sqlfiddle.com/#!2/ddc344/1,这只是一个例子。我知道这不适合。检查该查询的结果。 – unknown

+0

@unknown谢谢,但是当多于一个C1/C2/C3匹配时,您的查询会返回多行。我想要第一个匹配的结果不是多行。 – user3416602