0

我有三个表,一个父级和两个子级,两个子级使用 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 应该为空或空白,如果不存在 C 的行,则类似。

4

1 回答 1

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

For a good explanation of SQL joins checkout: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2012-12-11T11:01:27.633 回答