2013-03-29 41 views
-3

MainTable两个以上的表使用连接

ID Column1   TableA.fK TableB.fk 
1 some-value  1   null 
2 some-value  1   1 
3 some-value  null  2 

表A

TableA.pk Column1 
1   some-value 

表B

TableB.pk Column1 
1   some-value 
2   some-value 
Select Main.ID,Main.Column1 ,A.Column1,B.Column1 
FROM MainTable main 
LEFT JOIN 
     Table A 
ON  Main.TableA.fk = A.TableA.pk 
LEFT JOIN 
     TableB b 
ON  Main.TableB.fk =B.TableB.fk 
WHERE Main.ID =1 

手段

结果是

ID Column1  A.Column1 B.Column1 
    1 some-value some-value null 

期待输出

ID column1   A.Column1 
1  some-value  some-value 

不应显示B.column1

时表外键值也没有null,则应该从表A得到的所有细节,如果上述SELECT查询使用RDBMS的Microsoft SQL Server 2008

+2

如果你只需要'ID'和'A.Column1',为什么你在'SELECT'中包含'B.Column1'? –

回答

0

我这里不明白的问题这里使用
IM。如果您不希望它显示 B.Column1,请从 Select声明中取 B.Column1

你现在有

选择Main.ID,A.Column1,B.Column1

将其更改为

选择Main.ID,A.Column1

根据您的意见,似乎你正在寻找CoalesceIsNull,这取决于你正在使用哪个DBMS(你也没有在你的问题中告诉我们)。

像这样的东西应该工作:

SELECT 
    Main.ID, Coalesce(A.Column1, B.Column1) as Column1 
FROM  
    MainTable main 
LEFT JOIN 
    Table A 
ON  
    Main.TableA.fk = A.TableA.pk 
LEFT JOIN 
    TableB b 
ON 
    Main.TableB.fk = B.TableB.fk 
WHERE 
    Main.ID = 1 
+0

这是原始问题(*已被删除*)[Link Here](http://stackoverflow.com/questions/15697307/how-to-use-coalesce)。该操作只想投影*非空*列。所以基本上我对OP的建议是使用* dynamic sql *。 –

+0

我需要两个表,如果两个表的外键不为空 –

+1

@JW:啊,是的。这些知识确实改变了很多。我会删除这个答案。感谢您的高举。 :-) –

0

只是不要把此列进名单SELECT

SELECT Main.ID, A.Column1 
FROM MainTable main 
LEFT JOIN 
     Table A 
ON  Main.TableA.fk = A.TableA.pk 
LEFT JOIN 
     TableB b 
ON  Main.TableB.fk = B.TableB.fk 
WHERE Main.ID = 1 
+0

这是原来的问题(*已被删除*)[链接这里](http://stackoverflow.com/questions/15697307/how-使用的,聚结)。该操作只想投影*非空*列。所以基本上我对OP的建议是使用* dynamic sql *。 –

0

从查询中删除B.Column1

Select Main.ID,A.Column1 FROM MainTable main LEFT JOIN Table A ON Main.TableA.fk=A.TableA.pk LEFT JOIN TableB b ON Main.TableB.fk =B.TableB.fk WHERE Main.ID =1