SQL用于从具有两个子表的父表中查询行,如果不存在子行,则使用空值

时间:2012-12-11 10:55:25

标签: sql join

我有三个表,一个父项和两个子项,这两个子项使用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的行,则类似。

1 个答案:

答案 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