Stream Analytics - Как сделать FULL OUTER JOIN со справочными данными?

Я использую T-SQL Stream Analytics для полного внешнего объединения входных данных потока и ввода справочных данных.

Я пробовал следующий запрос, но получаю сообщение об ошибке: "При соединении потоковых и справочных данных справочные данные должны быть справа".

Я хочу сделать полное внешнее объединение двух - как мне это сделать, если справочные данные никогда не могут быть на левой стороне?

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

2 ответа

Это комментарий, который не помещается в разделе комментариев.

Дело в том, что все имена столбцов в любой таблице должны всегда иметь уникальные имена. Вы не можете иметь два столбца с одинаковым именем в таблице.

Когда вы запускаете 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 

Я надеюсь, что это помогает.

Возможно, примерные данные помогли бы, но я думаю, что на основе вашего вывода требуется полное внешнее соединение, которое должно дать результат.

 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]
Другие вопросы по тегам