如何在JOIN语句中找到哪一列导致行重复?

时间:2018-04-25 10:07:01

标签: sql sql-server database join multiple-results

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"结果视图中的面板。可以选择任何单元格/行/列,并且可以动态计算值的计数和不同的计数。这些可以按列分组,这正是搜索哪个列具有不同值时所需的列。超级有用。

参考:https://github.com/dbeaver/dbeaver/wiki/Panels

1 个答案:

答案 0 :(得分: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的那些)...然后您可以分析这些表的连接条件