首页 > 解决方案 > 流分析 - 如何使用参考数据进行 FULL OUTER JOIN?

问题描述

我正在使用流分析的 T-SQL 对流输入和参考数据输入进行完全外部联接。

我已经尝试了以下查询,但我不断收到错误消息“当加入流和参考数据时,参考数据必须在右侧”。

我想做两者的完全外连接 - 如果参考数据永远不会在左侧,我该怎么做?

With leftJoin AS (
    SELECT SA.[InputID], RD.[InputID]
    FROM StreamData AS SA
    LEFT JOIN ReferenceData AS RD
    ON SA.[InputID] = RD.[InputID]
),

rightJoin AS (
    SELECT SA.[InputID], RD.[InputID]
    FROM ReferenceData AS RD -- Causes the error 'cause it should be on the right
    LEFT JOIN StreamData AS SA
    ON SA.[InputID] = RD.[InputID]
)

SELECT *
INTO [StorageTable]
FROM leftJoin 
UNION 
SELECT *
FROM rightJoin 

我的预期输出是这样的:


SA.[InputID]   |  RD.[InputID]
------------------------------
1              |            1
2              |         null
null           |            3
4              |            4

标签: sqlazuretsqljoinstream-analytics

解决方案


这是不适合评论部分的评论。

关键是任何表上的所有列名都必须始终具有唯一的名称。一个表上不能有两个同名的列。

当您运行 a 时,SELECT INTO您实际上是在创建一个新表。正在创建的表的每一列都应该有不同的名称。否则数据库引擎将拒绝创建此表。

我在想你应该试着给第二列起一个不同的名字。例如:

With leftJoin AS (
    SELECT
      SA.[InputID], 
      RD.[InputID] as rd_inputid -- added an alias to the column
    FROM StreamData AS SA
    LEFT JOIN ReferenceData AS RD
    ON SA.[InputID] = RD.[InputID]
),    
rightJoin AS (
    SELECT
      SA.[InputID], 
      RD.[InputID] as rd_inputid -- added an alias to the column
    FROM ReferenceData AS RD
    LEFT JOIN StreamData AS SA
    ON SA.[InputID] = RD.[InputID]
)    
SELECT *
INTO [StorageTable]
FROM leftJoin 
UNION 
SELECT *
FROM rightJoin 

我希望它有所帮助。


推荐阅读