Sql 在具有不同名称的列上联接表,但在结果中生成单个列
我不知道如何简明地表述问题来描述我想解决的问题。Sql 在具有不同名称的列上联接表,但在结果中生成单个列,sql,sql-server,database,tsql,join,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 3
我有以下两张表:
表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 tableA.idA as Id, tableA.numA as numA, tableB.numB as numB
from tableA
inner join tableB on tableA.Id = tableB.Id
这就是你想要的吗
select tableA.idA as Id, tableA.numA as numA, tableB.numB as numB
from tableA
inner join tableB on tableA.Id = tableB.Id
像这样的事,我应该做
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中添加了空id记录):
像这样的事,我应该做
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中添加了空id记录):
+1:虽然我个人总是在boolena逻辑中使用显式大括号。这不仅是为了阻止我搞砸,也是为了在阅读时阻止误解
(A=B)或(A为NULL,B为NULL)
或类似内容……如果还有一个表(idC,numC)要加入,此脚本会有任何问题吗?问题是我有15个要连接到一个表中,它们应该按id分组,并有15个相应的numX列。+1:尽管我个人总是在boolena逻辑周围使用显式大括号。这不仅是为了阻止我搞砸,也是为了在阅读时阻止误解(A=B)或(A为NULL,B为NULL)
或类似内容……如果还有一个表(idC,numC)要加入,此脚本会有任何问题吗?问题是,我有15个表要连接到一个表中,它们应该按id分组,并有15个相应的numX列。如果有这么多表,或者不知道有多少表,那么您的数据库设计可能有问题,无法使用SQL查询解决如果有这么多表,或者您不知道有多少个表,您的数据库设计可能有一个问题,使用SQL queryAlmost无法解决,除非当表a中没有匹配行时,numB
必须默认为0。几乎,除了当表A中没有匹配行时,numB
必须默认为0。