0

我正在使用流分析的 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

4

2 回答 2

0

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

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

当您运行 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 

我希望它有所帮助。

于 2019-01-24T22:29:58.470 回答
0

可能样本数据会有所帮助,但我认为根据您的输出,需要完整的外部连接并且应该给出输出。

 SELECT distinct SA.[InputID] as InputIDfromSA, RD.[InputID] as InputIDfromRD
 FROM ReferenceData AS RD  
 Full outer JOIN StreamData AS SA
 ON SA.[InputID] = RD.[InputID]
于 2019-01-25T01:23:27.317 回答