sql - 在具有不同名称的列上连接表但在结果中产生单列

标签 sql sql-server database tsql join

我不确定如何简洁地提出问题来描述我想解决的问题。
我有以下两个表:
表 1

[idA] [numA]
 NULL   8
 1      10
 2      15
 3      16

表 2

[idB] [numB]
 2      14
 3      30
 4      32

现在,我不确定如何制定 T-Sql 查询以产生以下结果:

[id] [numA] [numB]
NULL  8      0
1     10     0
2     15     14
3     16     30
4     0      32

对于如何解决这个问题有什么建议吗?

更新:


如果再加入一个表(idC、numC),@AdaTheDev 的脚本会不会有任何问题?在那种情况下,最好的解决方案是什么?问题是我有 15 个要加入一个表,它们应该按 id 分组并有 15 个对应的 numX 列。

最佳答案

像这样的事情,应该做

SELECT ISNULL(t1.idA, t2.idB) AS id, 
    ISNULL(t1.numA, 0) AS numA, 
    ISNULL(t2.NumB, 0) AS numB
FROM table1 t1
    FULL OUTER JOIN table2 t2 ON t1.idA = t2.idB OR t1.ida IS NULL AND t2.idb IS NULL

更新
注意我在连接中添加了一个 OR 条件来处理 idA 和 idB 为 NULL 的情况,以给出一个结果

完整测试脚本(在表2中添加了NULL id记录):

DECLARE @Table1 TABLE (ida integer, numA INTEGER)
DECLARE @Table2 TABLE (idb integer, numb INTEGER)

INSERT @Table1 ([ida], [numA])
VALUES (NULL, 8), (1, 10), (2, 15), (3, 16)

INSERT @Table2 ([idb], [numb])
VALUES (NULL, 9), (2, 14), (3, 30), (4, 32)

SELECT ISNULL(t1.idA, t2.idB) AS id, 
    ISNULL(t1.numA, 0) AS numA, 
    ISNULL(t2.NumB, 0) AS numB
FROM @table1 t1
    FULL OUTER JOIN @table2 t2 ON t1.idA = t2.idB OR t1.ida IS NULL AND t2.idb IS NULL

关于sql - 在具有不同名称的列上连接表但在结果中产生单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10549952/

相关文章:

sql - 如何获取 Oracle 数据库中的所有序列?

SQL Server - 将存储过程从一个数据库复制到另一个数据库

sql - 使用 HAVING 还是 WHERE?

mysql - 如何显示一张表的所有结果并检查条件

mysql - 使用连接进行限制 X,Y MySQL 查询运行速度更快

Java 库可部分导出数据库,同时尊重引用完整性约束

mysql - 重写存储过程以返回而不是中值 (50%),20%/30% 等位置的项目

sql - 从 SQL Server 中的表中选择 XML

php - 使回显结果可点击并运行新查询

sql - 如何使用多个条件填充潜在客户窗口的空值