Niv*_*hen 1 sql database sql-server join
我正在使用 SQL Server 2012 并希望查询以下内容:
我有两个表,其中的列大部分不同。(一个表有 10 列,另一个表有 6 列)。然而,它们都包含一个包含 ID 号的列和另一个包含类别名称的列。
现在我希望有一个表,其中包含两个表的所有行,并具有一个 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)
关于正确的完成方法有什么建议吗?
做你的FULL JOIN ON 1=0
这将防止行合并并确保您始终从每个表中获得每行的 1 个副本。
进一步解释:
AFULL JOIN从两个表中获取行,无论它们是否匹配,但当它们匹配时,它将它们合并到一行中。
您想要一个从不组合行的完全联接,因为您希望两个表中的每一行都出现一次,无论如何。1 永远不可能等于 0,因此在 1=0 上执行 FULL JOIN 将为您提供一个完全连接,其中没有行相互匹配。
当然,您已经执行了 ISNULL 来确保 ID 和 Name 列始终具有值。
| 归档时间: |
|
| 查看次数: |
12371 次 |
| 最近记录: |