2016-12-25 16 views
1

私は大規模なMySQLデータベースを1百万行以上持っています。行方不明のeidをどのように見つけられますか?mysqlに見つからないIDを見つけるには

+----+-----+ 
| id | eid | 
+----+-----+ 
| 1 | 1 | 
+----+-----+ 
| 2 | 2 | 
+----+-----+ 
| 3 | 4 | 
+----+-----+ 

この例では、欠落しているすべてのeidをリストしたいと思います。私は多くのことを試してきましたが、私は何をすべきか、多くの時間を要します。

誰かが私を助けてくれることを願っています。

おかげ

+0

多分5もありません。 – Strawberry

答えて

1

あなたは必要な行を検索するためにNOT EXISTSを使用することができます。

create table t(id integer, eid integer); 
insert into t values(1,1); 
insert into t values(2,2); 
insert into t values(3,4); 

SELECT id 
FROM t a 
WHERE NOT EXISTS 
    (SELECT 1 
    FROM t b 
    WHERE b.eid = a.id); 

またはNOT INを使用します。

SELECT ID 
FROM t 
WHERE ID NOT IN 
    (SELECT EID 
    FROM t); 

は生成します。

| id | 
|----| 
| 3 | 
0

は、重複する番号を検索する

SELECT ID FROM table WHERE ID NOT IN(SELECT EID FROM table); 
+0

このクエリの結果は次のとおりです。空集合(5.35秒) – Gimo

+0

更新された集合を試してください。 –

+0

こんにちは、私は18時間前にこのクエリを実行し、結果を待っています。それは普通ですか? – Gimo

0

以下の文字列で検索してください簡単です。

select id、count()from sequence id by count()> 1;

このケースでは、私はこの記事に集中していないので、重複はありません(重複を見つけることは、それがどのように完了したかを見ることができれば分かります)。私は、シーケンスの中に見つからない数字を見つけるために頭を一瞬傷つけなければならなかった。 L l.id上のRとして配列を外部結合左の配列から を開始するよう

選択l.id + 1 + 1 = r.id r.idがnull ;ここで私の最初のショットであります

アイデアは、同じシーケンスに対して除外結合を行い、1つの位置だけシフトさせることです。隣接する番号を持つ任意の数値が正常に結合され、WHERE句は一致した数値を残して正常な一致を排除します。結果は次のとおりです。

https://www.xaprb.com/blog/2005/12/06/find-missing-numbers-in-a-sequence-with-sql/

+0

こんにちは、私はエラーメッセージが表示されます: – Gimo

+0

#1064 - あなたはSQL構文でエラーがあります。 count()> 1のLIMIT 0、25 '行目のidでシーケンスグループから')近くで使用する正しい構文については、MySQLサーバのバージョンに対応するマニュアルをチェックしてください。 – Gimo

関連する問題