Как найти, какой столбец вызывает дублирование строк в операторе JOIN?
MS SQL Server. У меня такая ситуация:
SELECT
x1,
x2,
x3,
x4,
x5,
x6,
x7,
x8,
x9,
x10,
x11,
x12,
x13
FROM
T1 -- this has a lot of columns
JOIN
T2, -- this has a lot of columns
T3, -- this has a lot columns as well
T4, -- same here and other tables
T5,
T6,
T7,
T8,
T9,
T10,
T11,
T12,
T13,
T14
И у меня есть несколько дублированных строк, поэтому столбец, который содержит различные значения, не входит в число этих 13 выбранных столбцов. Я хочу решить эту проблему, обнаружив, какой столбец в соединяемых таблицах имеет различное значение, а затем решить, что с ним делать.
Решение состоит в том, чтобы выбрать T1.*
, T2.*
и т. д. и тщательно анализировать результаты. Дело в том, что мне пришлось бы выбирать много столбцов и тратить время на выполнение повторяющейся задачи.
Есть ли инструмент / процедура / запрос, который сделал бы это автоматически для меня? Я считаю, что это обычная задача при разработке сложных запросов к базе данных.
РЕДАКТИРОВАТЬ
Я нашел отличный инструмент, который может упростить анализ select *
результаты запроса.
Dbeaver, бесплатный универсальный менеджер баз данных, имеет панель "Calc" в представлении результатов. Можно выбрать любые ячейки / строки / столбцы, и он рассчитывает количество и различное количество значений на лету. Они могут быть сгруппированы по столбцам, и это именно то, что нужно при поиске столбца с различными значениями. Супер полезно.
1 ответ
Один вариант это -
SELECT
x1, count (DISTINCT T1.*),
x2, count (DISTINCT T2.*),
x3, count (DISTINCT T3.*)
FROM
T1 -- this has a lot of columns
JOIN
T2, -- this has a lot of columns
T3
GROUP BY
x1,
x2,
x3
Это скажет вам, какие таблицы имеют повторяющиеся строки (те, у которых количество> 1)... затем вы можете проанализировать условие соединения для этих таблиц