我有三个表,一个父项和两个子项,这两个子项使用ID列与父项具有FK关系,并且每个父行可能有0到n个子行。我需要生成一个查询,该查询将生成来自所有三个表的单个数据结果集。
如果子行不存在,则该表的字段应为空白,否则,这些字段应具有适当的值。
Table A Table B Table C
-------- ------- -------
ID (PK) A_ID (FK) A_ID (FK)
DataA1 DataB1 DataC1
DataA2 DataB2 DataC2
此查询:
select * from A,B,C where A.ID = B.A_ID and A.ID = C.A_ID
将仅返回A中存在子行B和C的行。我想从A返回行,其中对于A.ID,存在子行B或子行C.如果B不存在任何行,则B.DataB1和B.DataB2应为null或空白,如果不存在C的行,则类似。
答案 0 :(得分:0)
您应该使用外部联接。
select
A.ID,
A.DataA1,
A.DataA2,
B.A_ID,
B.DataB1,
B.DataB2,
C.A_ID,
C.DataC1,
C.DataC2
from A
left join B
on A.ID = B.A_ID
left join C
on A.ID = C.A_ID
有关SQL连接结帐的详细说明:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html