Stream Analytics - Как сделать FULL OUTER JOIN со справочными данными? - PullRequest
0 голосов
/ 24 января 2019

Я использую 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 ]

0 голосов
/ 25 января 2019

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

 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]
0 голосов
/ 25 января 2019

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

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

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

Надеюсь, это поможет.

...