我希望能够比较同一个 SQL 表中的 2 条记录并判断它们是否不同。我不需要说有什么不同,只是它们不同。
另外,我只需要比较记录中 10 列中的 7 列。即。)每条记录有 10 列,但我只关心其中的 7 列。
这可以通过 SQL 来完成,还是我应该在 C# 中获取记录并对它们进行哈希处理以查看它们是否是不同的值?
我希望能够比较同一个 SQL 表中的 2 条记录并判断它们是否不同。我不需要说有什么不同,只是它们不同。
另外,我只需要比较记录中 10 列中的 7 列。即。)每条记录有 10 列,但我只关心其中的 7 列。
这可以通过 SQL 来完成,还是我应该在 C# 中获取记录并对它们进行哈希处理以查看它们是否是不同的值?
您可以通过查询编写一个组,如下所示:
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 (...)。
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
不需要哈希。正常的相等比较就足够了:
select isEqual = case when t1.a <> t2.a or t1.b <> t2.b bbb then 1 else 0 end
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
你不能只使用 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 组合,它只会返回一行。