【问题标题】:SQL to query rows from parent tables with two child tables, with blank values if no child row existsSQL 从具有两个子表的父表中查询行,如果不存在子行,则使用空白值
【发布时间】:2012-12-11 10:55:24
【问题描述】:

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

【问题讨论】:

    标签: sql join


    【解决方案1】:

    您应该使用外连接。

    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

    【讨论】:

      猜你喜欢
      • 2023-01-01
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多