0

我是 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

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

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

4

4 回答 4

3
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值。

于 2014-09-16T22:18:48.287 回答
2

内连接是您正在寻找的连接

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

于 2014-09-16T22:15:48.443 回答
1

希望这会帮助你。

SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;

于 2014-09-16T22:22:54.547 回答
-1

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

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

希望对你有帮助

于 2017-03-10T12:45:42.093 回答