代码之家  ›  专栏  ›  技术社区  ›  Peanut

右表中有2条记录时返回单行

  •  1
  • Peanut  · 技术社区  · 15 年前

    我有两个相关的SQL Server表…表A和表B。

    ***TableA - Columns***
    TableA_ID     INT
    VALUE         VARCHAR(100)
    
    ***TableB - Columns***
    TableB_ID     INT
    TableA_ID     INT
    VALUE         VARCHAR(100)
    

    表A中的每一条记录都有 总是 表B中有2条记录。因此,表A与表B有一对多的关系。

    如何编写一条SQL语句来联接这些表,并为表A中的每一行返回一行,其中包括:

    • 中的值列的列 第一 表B中的相关行
    • 中的值列的列 第二 表B中的相关行?
    1 回复  |  直到 15 年前
        1
  •  2
  •   Tomalak    15 年前

    对于2个相关的记录,这很容易。将表B联接两次:

    SELECT 
      A.TableA_ID,
      A.VALUE      AS VALUE_A
      B1.VALUE     AS VALUE_B1
      B2.VALUE     AS VALUE_B2
    FROM
      TableA AS A
      INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID
      INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID
    WHERE
      B1.TableB_ID < B2.TableB_ID
    

    如果在表B中有一列确定什么是“第一个值”和什么是“第二个值”,那么这就更容易了(对于表B中的n个列,它将像这样工作,只需添加更多的联接):

    SELECT 
      A.TableA_ID,
      A.VALUE      AS VALUE_A
      B1.VALUE     AS VALUE_B1
      B2.VALUE     AS VALUE_B2
    FROM
      TableA AS A
      INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID AND B1.Type = '1'
      INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID AND B2.Type = '2'
    

    上的复合索引 TableB 结束 (TableA_ID, Type) 帮助此加入。