2016-05-10 12 views
0

2つのユーザテーブルを重複なしでマージする必要があります。2つのテーブルを重複せずにマージする

たとえば、私のデータベースでは、テーブルがen_userとkn_userであり、両方のユーザーが存在するため、kn_userとen_userをマージするクエリを実行すると、kn_userに存在する一意のユーザーをen_userにコピーする必要がありますどちらもマージするべきではありません。

私のテーブルはより良く理解するためにとてもen_usersテーブル

**id name** 
1  Rakesh 
2  Deepu 
3  sudha 
4  sandeep 
5  Anil 

kn_userテーブル

**id name** 
1  Ashwini 
2  Rakesh 
3  sudha 
4  sunil 
5  Anil  

際に必要としているen_usersこの出力

en_usersテーブル

とマージkn_usersで ここで
**id name** 
1  Rakesh 
2  Deepu 
3  sudha 
4  sandeep 
5  Anil 
6  Ashwini 
7  Sunil 
+0

ユニークなエンティティの組み合わせのユニークなキーを作成する必要があると思います。ユニークな「名前」を指定するだけで、新しいテーブルにはユニークなキー が作成されます。次に、古いテーブルのすべてのデータをフェッチし、 "INSERT INTO IGNORE"を使用して新しいテーブルに挿入します。 –

答えて

0

は何をしたいんクエリです:

select (@rn := @rn + 1) as id, name 
from ((select id, name, 1 as priority 
     from en_users 
    ) union all 
     (select id, name, 2 
     from kn_users k 
     where not exists (select 1 from en_users e where e.name = k.name) 
    ) 
    ) ek cross join 
    (select @rn := 0) params 
order by priority, id; 

サブクエリ内のロジックが第二のテーブルから一つのテーブルからすべてを取り、その後、唯一の非一致する行することです。この例はnameに基づいています。

クエリでは、質問の例に基づいて最終的なidを割り当てるように注意してください。最初に "en"テーブルから "kn"テーブルへのidの割り当てと、2つのテーブルのIDによる順番の割り当てを行います。

+0

申し訳ありません、私はSQLに新しいです、私に@ rnを教えてください? –

+0

@rnは何を意味していますか?私たちの質問 –

0
Set @ID = 0 
Select @ID:[email protected]+1 AS ID,t1.Name 
from (Select name from en_users 
union 
Select name from kn_users) as t1 
ORDER BY t1.Name 

IDは異なるでしょう。とにかくあなたはIDを変更しています。

関連する問題