如何将两个表连接在一起并返回两个表中的所有行,以及将其中的一些列合并为一列

Niv*_*hen 1 sql database sql-server join

我正在使用 SQL Server 2012 并希望查询以下内容:

我有两个表,其中的列大部分不同。(一个表有 10 列,另一个表有 6 列)。然而,它们都包含一个包含 ID 号的列和另一个包含类别名称的列。

  1. 表之间的 ID 号可能会重叠(例如,1 个表可能有 200 个不同的 ID,而其他 900 个表可能有 120 个 ID)。
  2. 每个表的类别名称都不同且唯一。

现在我希望有一个表,其中包含两个表的所有行,并具有一个 ID 列和一个 Category_name 列(总共 14 列)。因此,如果相同的 ID 在表 1 中有 3 条记录,在表 2 中有另外 5 条记录,我希望拥有所有 8 条记录(8 行)

我认为这里复杂的事情是有一个“Category_name”列。

我尝试了以下操作,但是当两个表中都没有空值时,我只得到一条记录而不是两条记录:

SELECT isnull(t1.id, t2.id) AS [id]
    ,isnull(t1.[category], t2.[category_name]) AS [category name]
FROM t1
FULL JOIN t2
    ON t1.id = t2.id;
Run Code Online (Sandbox Code Playgroud)

关于正确的完成方法有什么建议吗?

Tab*_*man 5

做你的FULL JOIN ON 1=0

这将防止行合并并确保您始终从每个表中获得每行的 1 个副本。

进一步解释:

AFULL JOIN从两个表中获取行,无论它们是否匹配,但当它们匹配时,它将它们合并到一行中。

您想要一个从不组合行的完全联接,因为您希望两个表中的每一行都出现一次,无论如何。1 永远不可能等于 0,因此在 1=0 上执行 FULL JOIN 将为您提供一个完全连接,其中没有行相互匹配。

当然,您已经执行了 ISNULL 来确保 ID 和 Name 列始终具有值。