2016-12-25 3 views
1

Ich habe eine große MySQL-Datenbank mit mehr als 1 Million Zeilen. Wie kann ich die fehlenden eids finden?Wie finde ich fehlende IDs in Mysql

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

Ich mag alle fehlenden eid der Liste, die in diesem Beispiel 3. Ich habe viele Dinge ausprobiert, aber alles, was ich brauche, braucht viel Zeit.

Ich hoffe, dass mir jemand helfen kann.

Dank

+0

Vielleicht 5 zu fehlen. – Strawberry

Antwort

1

können Sie NOT EXISTS verwenden, um die erforderlichen Zeilen zu finden.

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); 

oder verwenden NOT IN:

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

produziert:

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

Versuchen Sie, die unter Abfrage

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

Das Ergebnis dieser Abfrage lautet: Leeres Set (5,35 Sek.) – Gimo

+0

Probieren Sie das aktualisierte aus. –

+0

Hallo, ich habe diese Abfrage vor 18 Stunden ausgeführt und auf das Ergebnis gewartet. ist das normal? – Gimo

0

Suchen nach doppelten Zahlen ist einfach:

ID wählen, Anzahl () aus Sequenz Gruppe nach ID mit Anzahl ()> 1;

In diesem Fall gibt es keine Duplikate, da ich mich in diesem Beitrag nicht darauf konzentriere (das Finden von Duplikaten ist einfach genug, dass ich hoffe, Sie können sehen, wie es gemacht wird). Ich musste mich eine Sekunde lang am Kopf kratzen, um fehlende Zahlen in der Sequenz zu finden. Hier ist mein erster Schuss auf ihn:

wählen l.id + 1 als von Sequenz starten als l äußerte LEFT JOIN-Sequenz, wie r auf l.id + 1 = r.id wo r.id null ist;

Die Idee ist Ausgrenzung gegen die gleiche Sequenz, aber um eine Position verschoben. Jede Zahl mit einer benachbarten Zahl wird erfolgreich hinzugefügt, und die WHERE-Klausel wird erfolgreiche Übereinstimmungen eliminieren, wobei die fehlenden Zahlen übrig bleiben. Hier ist das Ergebnis:

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

+0

Hallo, ich bekomme die Fehlermeldung: – Gimo

+0

# 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, für die richtige Syntax, die in der Nähe von ') von der Sequenzgruppe verwendet werden soll, mit der ID count()> 1 LIMIT 0, 25' in Zeile 1 – Gimo

Verwandte Themen