Sql 使用联接的两个以上表
MainTableSql 使用联接的两个以上表,sql,join,Sql,Join,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
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
选择Main.ID、Main.Column1、A.Column1、B.Column1
从主表main
左连接
表A
在Main.TableA.fk=A.TableA.pk上
左连接
表b
在Main.TableB.fk=B.TableB.fk上
其中Main.ID=1
意味着
结果是
ID Column1 A.Column1 B.Column1
1 some-value some-value null
ID column1 A.Column1
1 some-value some-value
预期输出
ID Column1 A.Column1 B.Column1
1 some-value some-value null
ID column1 A.Column1
1 some-value some-value
不应显示B.column1
当tableA外键值不为空时,如果在此处使用上述SELECT查询,则应从tableA获取所有详细信息我正在使用RDBMS Microsoft Sql Server 2008我不理解这里的问题。如果您不希望它显示
B.Column1
,请从Select
语句中取出B.Column1
你现在有
选择Main.ID、A.Column1、B.Column1
换成
选择Main.ID,A.Column1
根据您在下面的评论,您似乎正在寻找Coalesce
或IsNull
,这取决于您使用的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
只是不要将此列放入
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
从查询中删除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
如果您只需要
ID
和A.Column1
,为什么要将B.Column1
包含在SELECT
中?这是原始问题(已删除)。op只希望投影非空列。所以基本上我对OP的建议是使用动态sql。这是原始问题(已经删除)。op只希望投影非空列。所以基本上我对OP的建议是使用动态sql。如果两个表的外键都不可用,我需要两个表null@JW:啊,是的。这种知识确实会极大地改变事情。我将删除这个答案。谢谢你的提醒。:-)@KenWhite稍后删除:)
其他人可能也需要查看此:D
@AshokRavi:您需要编辑您的问题以提供更多信息。它现在所说的并不是你刚才在评论中所说的。