选择SQL中不同的行

选择SQL中不同的行,sql,tsql,Sql,Tsql,我有一个表,有太多的列和几百万行,我需要查询差异 在这些行上,希望只有一列是不同的,应该是自动递增的id字段 我需要做的是检查这些行实际上是否相同,以及在任何字段中是否存在任何差异 例如,如果Name列应该是Peter,Paul和Mary,Order列应该是132,我需要找到那些值不正确的行,但是我需要为表中的每一列找到它,我实际上不知道正确的值是什么意思,我不能只为每一列创建一个SELECT…WHERE Name='This' 那么我如何才能找到不同的行呢?使用直接SQL,无需编程如果您知道错

我有一个表,有太多的列和几百万行,我需要查询差异

在这些行上,希望只有一列是不同的,应该是自动递增的id字段

我需要做的是检查这些行实际上是否相同,以及在任何字段中是否存在任何差异

例如,如果Name列应该是Peter,Paul和Mary,Order列应该是132,我需要找到那些值不正确的行,但是我需要为表中的每一列找到它,我实际上不知道正确的值是什么意思,我不能只为每一列创建一个SELECT…WHERE Name='This'


那么我如何才能找到不同的行呢?使用直接SQL,无需编程

如果您知道错误结果的限制,例如10,那么您可以对它们进行排序,只得到前11个结果。你明白我的意思了吧


不过,我没有SQL方面的专业知识:

您是否需要以编程方式执行此操作,或者您可以自己运行一些查询来检查它

如果是后者,我只需选择不同的名称,以便开始。这将返回一个列表,其中包括132岁的彼得·保罗和玛丽,可能还有其他一些东西

然后通过执行选择来查找其他内容。。。其中name=如您所建议


您可以通过执行select distinct name、order、count*from…从第一个查询中获得更多信息。。。按名称、顺序分组。这将为您提供值列表和给定值集的频率。

如果我理解正确,您的问题对我来说不是100%清楚,您是在尝试查找不必要的重复行吗?如果是,请尝试以下SQL查询:

Select A.Id, B.Id
From Table A
   Join Table B       
     On A.Id <> B.Id
       And A.ColA = B.ColA
       And A.ColB = B.Col
       And A.ColC = B.ColC
        ... 

你会认为这个答案是你想要的并且会帮助你吗?下面是一个查找适当sql查询的方法。

如果两个独立列之间存在相关性,并且每当列a是给定值时,列B实际上只有一个正确值,那么您的数据库设计就不正确,因为这些相关性应该作为一个单独的表进行分解。

请尝试以下方法:

SELECT Name, OrderNum
FROM Orders T1
FULL OUTER JOIN (
    SELECT Name, OrderNum
    FROM Orders
    GROUP BY Name, OrderNum
    HAVING COUNT(*) > 1) T2
    ON T1.Name = T2.Name
        AND T1.OrderNum = T2.OrderNum

嵌套的select正在识别重复项,因此您需要以公共字段为目标,完整的外部联接将从结果集中排除重复项。因此,本质上,您是将表本身连接起来,以识别重复项并将其从结果中排除。如果只需要重复的数据,则将完整的外部联接更改为仅联接。

我想您有另一个表,其中包含数百万行正确的数据,对吗?如果您不知道正确的数据,您如何知道数据是否错误?算法将非常有用。正确的值是最常见的。我可以通过查看结果来找出正确的值,问题是我不想查看数以百万计的记录,我只想看看不同的记录是什么,这样我就可以了解它们为什么不同,从而了解它们为什么错了。
SELECT Name, OrderNum
FROM Orders T1
FULL OUTER JOIN (
    SELECT Name, OrderNum
    FROM Orders
    GROUP BY Name, OrderNum
    HAVING COUNT(*) > 1) T2
    ON T1.Name = T2.Name
        AND T1.OrderNum = T2.OrderNum