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]