2017-01-25 5 views
0

私がやっているWebアプリケーションに関する助けが必要です。グループAからグループBへのデータ全体を同じデータベーステーブルにコピーする必要があります。ただし、データが同じ場合があります。ここに私のデータベーステーブルの一例は、上記の例からC#で2つの異なるクエリから同じデータをdatatableで返すことはありますか?

id Name Age Group 
----------------------- 
1 Alpha 11 A 
2 Bravo 12 A 

3 Alpha 11 B  
4 Bravo 12 B 
5 Delta 11 B 

で、あなたはそのアルファブラボーを見ることができるの両方が同じ正確な年齢を持っており、それは、グループA & B.

の両方に存在しています

私の質問は、クエリを使ってグループA & Bの両方で見つかった同じ正確な名前と年齢を持つ重複したデータを確認することができますか?私は私としてSQLに&は無知かなり新しいです同じ

デルタのデータを保持したまま、私はグループBに複製ONLYを削除できるように、データが同一の第1である見つけるしたいと思います私はあなたたちが私に私が

はご協力いただきありがとうござい直面した問題への有益な説明&答えを与えることができることを望むグループA & B

両方で見つかった重複データを確認することができますSQLの任意の型を知りません

答えて

1

インナーセルフジョインこのように操作を行い、グループBの重複IDを検索するには:

SELECT tb.id 
    FROM YourTable AS ta 
    JOIN YourTable AS tb ON ta.name=tb.name AND ta.age=tb.age 
    WHERE ta.group='A' 
    AND tb.group='B' 

あなたはグループBから重複レコードを削除します削除で使用これを、することができます必要に応じてのみ:

DELETE YourTable 
    WHERE id IN (
     SELECT tb.id 
     FROM YourTable AS ta 
     JOIN YourTable AS tb ON ta.name=tb.name AND ta.age=tb.age 
     WHERE ta.group='A' 
     AND tb.group='B') 
+0

あなたの助けをありがとう! :) –

+0

@NeedHelpあなたは大歓迎です:) – Lucero

1

あなたは例えば、複数のグループに存在するすべての名前と年齢の組み合わせを取得するためにcountgroup byを使用することができます。

SELECT name, age, COUNT(DISTINCT `group`) AS groups 
FROM test 
GROUP BY name, age 
HAVING groups > 1; 

ここSQL Fiddleです。

+0

これにより、重複レコードの「ランダム」IDが取得されます。グループAまたはグループBのいずれかである可能性があります。集計機能を持たないグループ化されていない列を選択すると、バグが発生し、MySQLのバージョンと構成によってエラーが発生します(https://dev.mysql.com/doc/refman/5.7/en/)。 group-by-handling.htmlとhttps://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by – Lucero

+0

@Luceroそれを指摘してくれてありがとう。とにかく、OPの名前と年齢がわかったので、私の答え(削除されたID)を更新しました。 –

+0

私はOPが重複したグループBレコードのIDを望んでいると思う:「どのデータが同じであるかを最初に知りたいので**データを保持しながらグループBの重複を削除する**同じデルタの " – Lucero

2

PostgreSQLの例。 duplicate_id_listを使用すると、重複するIDがあります。これを削除クエリで使用すると、リスト内の最初のID以外のすべてを削除できます。

SELECT Name,Age,count(id),string_agg(id, ', ') AS duplicate_id_list FROM 
yourtable GROUP BY Name,Age having count(*) > 1 
関連する問題