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

于 2012-04-24T20:06:52.623 に答える