Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在具有不同名称的列上联接表,但在结果中生成单个列_Sql_Sql Server_Database_Tsql_Join - Fatal编程技术网

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。