2017-03-23 8 views
0

2つのデータベースを比較し、他のデータベースに存在しないすべてのユーザを取得しようとしています。例えばデータベースwp_membersには正しいメンバーリストがあり、データベースメンバーにはいくつかのメンバーが不足しているので、wp_membersとメンバーのユーザー名を比較し、メンバーのどのユーザー名が見つからないかを調べて追加できます。2つのテーブルを比較している他のテーブルに存在しないすべてのユーザ名を取得

はここデシベル

http://sqlfiddle.com/#!9/6a795e 

のためのSQLのフィドルであり、ここで私は

SELECT m.username FROM wp_members m, member n WHERE m.username<>n.username and n.siteid=1 group by m.username 

をやろうとしている。しかし何の成功を得なかったものである(wp_membersユーザ名を選択する必要があります)。

答えて

0

この問題の一般的な解決策は、テーブルを検索してNULLエントリを検索することで見つけることができます。

SELECT table1.id 
FROM table1 
LEFT JOIN table2 ON table2.id=table1.id 
WHERE table2.id IS NULL 
0

内部結合を使用してこの問題を解決することはできません。内部結合は、条件に一致する行に対してのみ実行でき、「一致しない」場合はそうではありません。

両方のテーブルの左外部結合を実行してusernameに一致させ、次にWHERE句でn.usernameにNULL値を持つ結果を除外することができます。

SELECT m.username FROM wp_members m LEFT OUTER JOIN members n ON m.username = n.username AND n.siteid = 1 WHERE n.username IS NULL GROUP BY m.username; 

もう1つの方法は、サブクエリでNOT IN文を使用することです。

外部結合を使用するソリューションは高速ですが、それほど簡単ではありません。

+0

メンバーテーブルにあるサイトIDのチェックはどこに追加しますか – user1001176

+0

ソリューションに追加しました。 – Juru

+0

Emmには、データ間に大きな違いがあります。これが正しい方法だと確信していますか? – user1001176

関連する問題