【问题标题】:SQL join to retrieve multiple lines in right tableSQL连接以检索右表中的多行
【发布时间】:2014-11-10 19:43:18
【问题描述】:

我是 SQL 新手,并试图找到在这种情况下使用的正确连接。表 A 包含一系列唯一(即无重复)ID。表 B 包含每个 ID 的多个测量值,包括表 A 中不存在的 ID。我需要一个组合表,其中包含表 B 中针对表 A 中的 ID 的所有数据。

例如:

A               B                                 JOINED:
ID              ID  | count | date                ID  | count | date
-               --  | ----- | ----                --  | ----- | ----
001             001 | 512   | 01-Aug-2014         001 | 512   | 01-Aug-2014
003             001 | 123   | 08-Aug-2014         001 | 123   | 08-Aug-2014
004             002 | 2325  | 01-Aug-2014         003 | 2325  | 01-Aug-2014
                002 | 7653  | 08-Aug-2014         003 | 423   | 08-Aug-2014
                003 | 2325  | 01-Aug-2014         004 | 2     | 01-Aug-2014
                003 | 423   | 08-Aug-2014         004 | 76    | 08-Aug-2014
                004 | 2     | 01-Aug-2014
                004 | 76    | 08-Aug-2014
                005 | 232   | 01-Aug-2014
                005 | 67    | 08-Aug-2014

现在,如果我正确理解连接,A-B 上的左连接会产生一个结果,每个 ID 只有一行,而不是每个日期的多行。一个 RIGHT 连接将包括 B 中不在 A 中的所有 ID。这是正确的吗?

所以,总而言之,我如何获得如上所示的结果表?

【问题讨论】:

  • 我想说最简单的方法是去 www school 并自己尝试一下。很确定它会比在 SO 上格式化更快
  • 在问之前我确实上过 www 学校。我一直在努力理解所有不同联接之间的区别。

标签: sql join left-join right-join


【解决方案1】:

这将从 B 中获取与 A 中的 ID 匹配的所有行。还将返回 A 中的所有行,以便回显您要打印的内容

SELECT* FROM A RIGHT OUTER JOIN B ON B.ID=A.ID ORDER BY ID ASC;

希望对你有帮助

【讨论】:

    【解决方案2】:
    SELECT A.ID 
          ,B.[Count]
          ,B.[Date]
    FROM TableA A INNER JOIN TableB B 
    ON A.ID = B.ID
    

    INNER JOIN 将为您提供两个表之间的匹配行。

    RIGHT JOIN 将为您提供连接关键字左侧表格中的匹配行以及连接关键字右侧表格中的所有行。

    LEFT JOIN 将为您提供连接关键字右侧表格中的匹配行以及连接关键字左侧表格中的所有行。

    FULL JOIN 将返回两个表中所有匹配和不匹配的行。

    匹配行ON条件中定义的连接条件会将tableA的ID列中的每个值映射到tableB的ID列中的每个matching值。

    【讨论】:

      【解决方案3】:

      希望这会对你有所帮助。

      选择列名 从表 1 内连接表2 ON table1.column_name=table2.column_name;

      【讨论】:

        【解决方案4】:

        内连接就是你要找的那个

        至于你的问题。 如果我理解正确,那么答案是否定的。左连接将是内连接 + LHS 表具有但不在 RHS 中的任何内容,它将用 null 填充空白,与右连接类似。

        【讨论】:

        • 但是内部连接不会只为每个 ID 生成一行吗?
        • 哦,等等...你的意思是没有'LEFT'说明符的INNER JOIN?
        • @thornate 不,内连接将匹配 ON 条件满足的所有行。是的......只是 INNER JOIN
        猜你喜欢
        • 2018-01-21
        • 1970-01-01
        • 2011-08-06
        • 2015-07-27
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多