如何在只在某些列中的列上联接多个SQL表

如何在只在某些列中的列上联接多个SQL表,sql,sql-server,Sql,Sql Server,我正在寻找一个针对以下问题的查询长度/可维护性方面的优雅解决方案: 我有10个SQL表,每个表有不同的列,每个表最多有50列。每个表都有一个ID列名,作为标识符,每个表的ID列名都不同 我希望以某种方式连接这些表,以便每个不同的ID都有一行,其中包含来自找到该ID的所有表的数据。问题是,我不知道在哪个表中会找到匹配项,如果有的话 示例1:表10中的第1行与表1、2和3中的一行匹配。 示例2:表10中的第2行与表2、7和8中的一行匹配。 示例3:表10中的第3行与表6中的一行匹配。 示例4:表10

我正在寻找一个针对以下问题的查询长度/可维护性方面的优雅解决方案:

我有10个SQL表,每个表有不同的列,每个表最多有50列。每个表都有一个ID列名,作为标识符,每个表的ID列名都不同

我希望以某种方式连接这些表,以便每个不同的ID都有一行,其中包含来自找到该ID的所有表的数据。问题是,我不知道在哪个表中会找到匹配项,如果有的话

示例1:表10中的第1行与表1、2和3中的一行匹配。 示例2:表10中的第2行与表2、7和8中的一行匹配。 示例3:表10中的第3行与表6中的一行匹配。 示例4:表10中的第4行在任何表中都不匹配。 等 如果我只是像这样链接外部联接:

SELECT
    --List all desired columns here
FROM table1
FULL OUTER JOIN table2 ON table1.ID = table2.ID
FULL OUTER JOIN table3 ON table1.ID = table3.ID
...
FULL OUTER JOIN table10 ON table1.ID = table10.ID
那么我想例2和例3不会以我想要的方式连接起来


那么,我如何将第一个ID列中的每个表与以前的表中的一些数据连接起来呢?

啊,我明白了。你说得对。在您的表单中,如果table2.id与任何table1.id都不匹配,则会发生奇怪的事情

在标准SQL中,通过使用更简单的方法进行修复。遗憾的是,SQL Server不支持使用。相反,请使用一组合并:


你想要什么栏目?为什么您的查询不起作用?一行怎么可能在任何表中都不匹配?我很困惑。样本数据和预期结果将有助于我们理解您的目标,因为现在还不清楚。最有可能的是OP在第一个表中有ID 1,2,第二个表中有ID 2,3,4,第三个表中有ID 3,4,并且需要结果,包含ID 1,2,3,4。如果您确实从表1中选择*作为t1完全连接,那么会发生什么情况呢。。。t9.ID=t10.ID上的完全联接表10为t10?
FROM table1 FULL JOIN
     table2
     ON table1.ID = table2.ID
     table3
     ON table3.ID = COALESCE(table1.ID, table2.ID) FULL JOIN
     . . .
     table10
     ON table10.ID = COALESCE(table1.ID, table2.ID, . . . , table9.ID)