То, что у меня здесь происходит, это:
Таблица 1: AOC_Model
AOC_ID int (Primary Key)
Model varchar(50)
Таблица 2: AOC_Chipset
AOC_CHIPSET_ID int (Primary Key)
CONTROLLER_ID int
CHIPSET_ID int
AOC_ID int
Таблица 3: Контроллер
CONTROLLER_ID int (Primary Key)
CONTROLLER varchar(10)
Таблица 4: Набор микросхем
CONTROLLER_ID int (Primary Key)
CHIPSET_ID int (Primary Key)
CHIPSET varchar(50)
Таблица 5: Notes_Chipset
NOTES_CHIPSET_ID int (Primary Key)
CONTROLLER_ID int
CHIPSET_ID int
DATE date
NOTES varchar(800)
Сначала у меня есть таблица наборов микросхем, которая присоединяется к контроллеру через Controller_ID, затем у меня есть AOC_Chipset, который фактически действует как таблица соединения между контроллером и набором микросхем. AOC_Chipset присоединяется к Chipset через Controller_ID и Chipset_id. Затем у меня есть Notes_Chipset, который также присоединяется к Chipset через Controller_ID и Chipset_id. И, наконец, у меня есть AOC_Model, который присоединяется к AOC_Chipset через AOC_ID
У меня много-много отношений происходит Вот. Я мог бы иметь один или два контроллера, назначенных на один и тот же AOC_ID. Я мог бы иметь один или два набора микросхем, назначенных одному контроллеру. У меня может быть несколько Заметок, назначенных одному и тому же Чипсету.
Я создал этот запрос в SQL Сервер 2019:
SELECT
dbo.AOC_CHIPSET.AOC_ID,
string_agg(dbo.CONTROLLER.CONTROLLER, ', ') AS vControllers,
string_agg(dbo.CHIPSET.CHIPSET, ', ') AS vChipsets,
string_agg(dbo.NOTES_CHIPSET.DATE, ', ') AS vDate,
string_agg(dbo.NOTES_CHIPSET.NOTES, ', ') AS vNotes
FROM
dbo.AOC_CHIPSET
INNER JOIN
dbo.CHIPSET ON dbo.AOC_CHIPSET.CONTROLLER_ID = dbo.CHIPSET.CONTROLLER_ID
AND dbo.AOC_CHIPSET.CHIPSET_ID = dbo.CHIPSET.CHIPSET_ID
INNER JOIN
dbo.CONTROLLER ON dbo.CHIPSET.CONTROLLER_ID = dbo.CONTROLLER.CONTROLLER_ID
INNER JOIN
dbo.NOTES_CHIPSET ON dbo.CHIPSET.CONTROLLER_ID = dbo.NOTES_CHIPSET.CONTROLLER_ID
AND dbo.CHIPSET.CHIPSET_ID = dbo.NOTES_CHIPSET.CHIPSET_ID
AND dbo.CONTROLLER.CONTROLLER_ID = dbo.NOTES_CHIPSET.CONTROLLER_ID
GROUP BY
dbo.AOC_CHIPSET.AOC_ID
Проблема в том, что результат содержит дубликаты
Я знаю, что могу использовать DISTINCT
, но я не могу понять, где / как разместить его вместе с string_agg
?