У меня есть много таблиц (назовем их таблицами с одним параметром), которые включают идентификатор (первичный ключ) и другой параметр (2 столбца в каждой таблице). Я хочу sh объединить их все в объединенную_таблицу, состоящую из столбцов ID и param_1, param_2, ...., param_n. Объединенная_таблица НЕ имеет значения NULL для столбца ID (первичный ключ) и допускает значение NULL для других столбцов. Когда параметры имеют значение идентификатора, я могу выполнить ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ в обычном режиме и никаких проблем. Но когда один параметр не имеет общего первичного ключа ни с одним из других параметров, я сталкиваюсь с проблемой. Проще говоря, предположим, что для ID 124 есть некоторое значение для param_3 из третьей таблицы single_param, но нет других вхождений и значений в других таблицах с одним параметром.
Мой код выглядит следующим образом:
Insert into [joined_table]
(ID, param_1,param_2,param_3)
SELECT
ID
,param1
,param2
,param3
FROM
(
SELECT
-- here if I write just "A.ID as ID" I will receive error of unfilled primary key column)
COALESCE( A.ID, B.ID, C.ID) as ID
, A.param_1 as param1
, B.param_2 as param2
, C.param_3 as param3
FROM
(
(SELECT ID, param_1 FROM single_param_table_1) A
FULL OUTER JOIN
(SELECT IِِD, param_2 FROM single_param_table_2) B on A.ID= B.ID
FULL OUTER JOIN
(SELECT ID, param_3 FROM single_param_table_3) C on A.ID = C.ID
-- or:
-- ISNULL(A.ID, B.ID)= C.ID
)
) as joined ;
Сообщение об ошибке, которое я получаю, выглядит следующим образом:
Violation of PRIMARY KEY constraint 'PK_joined_table'. Cannot insert duplicate key in object 'joined_table'.
Кажется, что параметр 3 не полностью отделен от другие параметры и в случае, если он разделяет ключ, повторная строка пытается вставить в таблицу.
В идеале я должен sh получить результат connected_table следующим образом:
ID | param 1 | param 2 | param 3
=======================================
123 | 11 | 12 | NULL
---------------------------------------
124 | NULL | NULL | 23