我有一个包含太多列和几百万行的表,我需要查询差异。
在这些行上,希望只有一列不同,应该是自动递增的id字段。
我需要做的是检查这些行是否实际相同,以及是否有任何字段存在任何差异。
例如,如果“Name”列应该是“Peter,Paul和Mary”,而“Order#”列应该是“132”,我需要查找那些值不是这些值的行是的,但是我需要为表中的每一列找到它 AND 我实际上并不知道正确的值是什么(这意味着我不能只创建一个“SELECT ... WHERE Name =每列的“这个”。
那我怎样才能找到不同的行? (使用直接SQL,无需编程)
答案 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
。