同じ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の組み合わせごとに1つの行のみを返します。