1

我希望能够比较同一个 SQL 表中的 2 条记录并判断它们是否不同。我不需要说有什么不同,只是它们不同。

另外,我只需要比较记录中 10 列中的 7 列。即。)每条记录有 10 列,但我只关心其中的 7 列。

这可以通过 SQL 来完成,还是我应该在 C# 中获取记录并对它们进行哈希处理以查看它们是否是不同的值?

4

5 回答 5

6

您可以通过查询编写一个组,如下所示:

SELECT field1, field2, field3, .... field7, COUNT(*)
FROM table
[WHERE primary_key = key1 OR primary_key = key2]
GROUP BY field1, field2, field3, .... field7
HAVING COUNT(*) > 1

这样,您可以获得字段 1 到 7 具有相同值的所有记录,以及出现次数。

添加括号之间的部分以限制您对重复项的搜索,无论是使用 OR 还是使用 IN (...)。

于 2012-04-24T19:50:01.023 回答
2
IF EXISTS (SELECT Col1, Col2, ColEtc...
            from MyTable
            where condition1
           EXCEPT SELECT Col1, Col2, ColEtc...
            from MyTable
            where condition2)
 BEGIN
    --  Query returns all rows from first set that are not column for column
    --  also in the second (EXCEPT) set.  So if there are any, there will be
    --  rows returned, which meets the EXISTS criteria. Since you're only
    --  checking EXISTS, SQL doesn't actually need to return columns.

 END
于 2012-04-24T20:02:36.983 回答
1

不需要哈希。正常的相等比较就足够了:

select isEqual = case when t1.a <> t2.a or t1.b <> t2.b bbb then 1 else 0 end
于 2012-04-24T19:50:47.597 回答
1
SELECT 
    CASE WHEN (a.column1, a.column2, ..., a.column7) 
            = (b.column1, b.column2, ..., b.column7)
         THEN 'all 7 columns same'
         ELSE 'one or more of the 7 columns differ'
    END AS result
FROM tableX AS a
  JOIN tableX AS b
    ON  t1.PK = @PK_of_row_one
    AND t2.PK = @PK_of_row_two
于 2012-04-24T20:05:09.390 回答
0

你不能只使用 DISTINCT 关键字吗?不会返回所有重复项,因此您收到的每一行都是唯一的(并且与其他行不同)。

http://www.mysqlfaqs.net/mysql-faqs/SQL-Statements/Select-Statement/How-does-DISTINCT-work-in-MySQL

所以你可以做这个查询:

SELECT DISTINCT x,y,z FROM RandomTable WHERE x = something

对于每个唯一的 x,y,z 组合,它只会返回一行。

于 2012-04-24T20:06:52.623 回答