Я объединяю три таблицы (выполняю полное внешнее объединение), чтобы я мог получить все записи из всех таблиц. Проблема, с которой я сталкиваюсь, связана с порядком, в котором я объединяю таблицы.
Таблица информации
альтернативный текст http://img235.imageshack.us/img235/7980/tableinfoow1.png
(1) Если я соединяю таблицы в последовательности TABLE1, TABLE2, TABLE3, я получаю две строки для записи с командой B и уровнем 1.
SELECT DISTINCT
(CASE WHEN T0.[TEAM] IS NOT NULL THEN T0.[TEAM] WHEN T1.[TEAM] IS NOT NULL THEN T1.[TEAM] WHEN T2.[TEAM] IS NOT NULL THEN T2.[TEAM] ELSE T0.[TEAM] END) AS [TEAM],
(CASE WHEN T0.[LEVEL] IS NOT NULL THEN T0.[LEVEL] WHEN T1.[LEVEL] IS NOT NULL THEN T1.[LEVEL] WHEN T2.[LEVEL] IS NOT NULL THEN T2.[LEVEL] ELSE T0.[LEVEL] END) AS [LEVEL],
T0.[VALUE1] AS [VALUE1],
T1.[VALUE2] AS [VALUE2],
T2.[VALUE3] AS [VALUE3]
FROM TABLE1 T0
FULL JOIN TABLE2 T1 ON T0.[TEAM] = T1.[TEAM] AND T0.[LEVEL] = T1.[LEVEL]
FULL JOIN TABLE3 T2 ON T0.[TEAM] = T2.[TEAM] AND T0.[LEVEL] = T2.[LEVEL]
(2) Если я соединю таблицы в последовательности TABLE2, TABLE3, TABLE1, я получу правильное количество строк в выводе.
SELECT DISTINCT
(CASE WHEN T0.[TEAM] IS NOT NULL THEN T0.[TEAM] WHEN T1.[TEAM] IS NOT NULL THEN T1.[TEAM] WHEN T2.[TEAM] IS NOT NULL THEN T2.[TEAM] ELSE T0.[TEAM] END) AS [TEAM],
(CASE WHEN T0.[LEVEL] IS NOT NULL THEN T0.[LEVEL] WHEN T1.[LEVEL] IS NOT NULL THEN T1.[LEVEL] WHEN T2.[LEVEL] IS NOT NULL THEN T2.[LEVEL] ELSE T0.[LEVEL] END) AS [LEVEL],
T0.[VALUE1] AS [VALUE1],
T1.[VALUE2] AS [VALUE2],
T2.[VALUE3] AS [VALUE3]
FROM TABLE2 T0
FULL JOIN TABLE3 T1 ON T0.[TEAM] = T1.[TEAM] AND T0.[LEVEL] = T1.[LEVEL]
FULL JOIN TABLE1 T2 ON T0.[TEAM] = T2.[TEAM] AND T0.[LEVEL] = T2.[LEVEL]
Проблема, с которой я сталкиваюсь, заключается в том, что я не осведомлен о таблицах ввода и принимаю все эти таблицы в качестве ввода от пользователя во время выполнения и выполняю соединение. Я не могу объединить две таблицы одновременно, поскольку технически моя таблица может объединять более трех таблиц одновременно (до 9 или 10).
Как я могу гарантировать, что я получаю все записи из всех таблиц (используя полное внешнее соединение), но НЕ получаю две строки, как в # 1.