选择SQL中不同的行

时间:2009-11-19 16:35:27

标签: sql tsql

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

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

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

例如,如果“Name”列应该是“Peter,Paul和Mary”,而“Order#”列应该是“132”,我需要查找那些值不是这些值的行是的,但是我需要为表中的每一列找到它 AND 我实际上并不知道正确的值是什么(这意味着我不能只创建一个“SELECT ... WHERE Name =每列的“这个”。

那我怎样才能找到不同的行? (使用直接SQL,无需编程)

6 个答案:

答案 0 :(得分:1)

如果您知道错误结果的限制(例如10),那么您可以订购它们并获得前11个结果。你知道我要去哪里,对吗?

我没有任何SQL专业知识,但是:)

答案 1 :(得分:1)

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

如果是后者,我只是选择“选择不同的名称,订单#”来开始。这应该返回一个列表,其中包括“Peter Paul和Mary,132”以及其他一些内容。

然后通过选择...找到其他的东西,其中name =“this”如你所知。

您可以通过“按名称选择不同的名称,订单#,计数(*),按名称排序#”来获取第一个查询的更多信息。这将为您提供值列表和给定值集的频率。

答案 2 :(得分:1)

如果我理解正确,(你的问题不是我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
        ... 

 Select ColA, ColB, etc.
 From Table
 Group By ColA, ColB, etc.
 Having Count(*) > 1     

答案 3 :(得分:1)

您认为这个答案是您正在寻找的并会对您有所帮助吗?这是一个Link来查找合适的sql查询。

答案 4 :(得分:1)

如果两个“独立”列之间存在相关性,只要列A是给定值,列B中实际上只有一个“正确”值,那么您的数据库设计就会损坏,因为这些相关性应该已被考虑在内作为一个单独的表格。

答案 5 :(得分:1)

试试这个:

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

嵌套选择正在识别重复项,因此您需要定位公共字段,FULL OUTER JOIN会从结果集中排除重复项。因此,基本上您将自己加入表格以识别重复项并将其从结果中排除。如果您只想 重复项,请将FULL OUTER JOIN更改为JOIN