1


0

他の列と一致しない列のフィールドを取得する方法

私は試した:

SELECT table1.page_title from table1、table2 WHERE table1.page_title!= table2.page_title

それは私がやったようにそれは多くの重複フィールドを生成します。

SELECT DISTINCT table1.page_title from table1、table2 WHERE table1.page_title!= table2.page_title

しかしそれはただハングします。

どうぞよろしくお願いします。

P.S これをやっているので、私はmediawikiのMWDumperツールのための除外リストを作成することができました。 出力されたSQLをインポートしたときに、現在のWikiエントリが上書きされないようにする必要があります。

編集:はい、彼らは2つの異なるテーブルです。 それぞれが約7万レコードを持っていますまた、なぜ私のクエリが遅いのですか? 誰かがはっきりさせることができたので私がその理由を学ぶことができたなら、私はそれをいただければ幸いです。

4 Answer


0


私がこれまで使ってきた自己結合を試すこともできますが、私はMySQLを使用していないので、これがもっと速いかどうかはわかりません。 このページはあなたにいくつかの洞察を与えるかもしれません:http://www.xaprb.com/blog/2006/10/11/how-to-delete-duplicate-rows-with-sql/


0


aとbは異なるテーブルで、どちらも "page_title"列を持っていますか?

もしそうなら、これを試してみてください:

WHERE page_title NOT INからのSELECT DISTINCT page_title(SELECT page_title FROM b)

あなたが興味があるのが(あなたが1つのテーブルしか持っていないのであれば)重複を取り除くことであるならば、それをするいくつかの方法があります、そのうちの2つは:

SELECT DISTINCT page_title FROMから

または

GROUP BYからのpage_titleの選択

GROUP BYオプションは遅くなりますが強くなります - HAVING句を追加して、表示されるタイトルのみを選択できます。 2回以上

GROUP BYによるGROUP BY page_titleの数を計算するpage_title(page_title)> 2

それが役立つことを願っています

(コメントをありがとうAaron F)


0


Raxの答えを少し改善しました:

SELECT DISTINCT a.page_title from WHERE a.page_title NOT IN(SELECT DISTINCT b.page_title FROM b)

あなたのテーブルのpage_titleカラムにインデックスがありますか? Explainプランは、照会に対して何を言っていますか?

あなたのテーブルのたった7万行を考えれば、とにかくあなたがインデックスを必要とすることは想像できません。


0


あなたは参加してこれを行うことができます:

SELECT DISTINCT table1.page_title from table1 LEFT JOIN table2 ON table1.page_title = table2.page_title WHERE table2.page_titleがNULLです

遅い場合は、(table2.page_title)にインデックスを追加してください。