748 Stimmen

Wie wählt man alle Datensätze einer Tabelle aus, die in einer anderen Tabelle nicht existieren?

table1 (id, name)
table2 (id, name)

Abfrage:

SELECT name   
FROM table2  
-- die noch nicht in table1 vorhanden sind

0 Stimmen

Schauen Sie sich die Lösung mit UNION unten an, die um ein Vielfaches schneller ist als jede andere hier aufgeführte Lösung.

5voto

w.Daya Punkte 196

Sie können die folgende Abfragestruktur verwenden:

SELECT t1.name FROM table1 t1 JOIN table2 t2 ON t2.fk_id != t1.id;

table1:

id

name

1

Amit

2

Sagar

table2:

id

fk_id

email

1

1

amit@ma.com

Ausgabe:

name

Sagar

4voto

Ajay Prajapati Punkte 27

Zuerst definieren Sie den Alias der Tabelle wie t1 und t2. Danach holen Sie den Datensatz der zweiten Tabelle. Danach gleichen Sie den Datensatz mit der where Bedingung ab:

SELECT name FROM table2 as t2
WHERE NOT EXISTS (SELECT * FROM table1 as t1 WHERE t1.name = t2.name)

4 Stimmen

Deins ist die gleiche diese Antwort. Bitte lies alle Antworten besonders bevor du alte Fragen beantwortest.

0 Stimmen

Der Profi der anderen Antwortenreplizierung!

3voto

Adrian Roth Punkte 59

Ich werde (weil ich noch nicht cool genug bin, um Kommentare abzugeben) die Antwort im richtigen Posten....für den Fall, dass es jemanden gibt, der eine bessere Erklärung für nötig hält.

SELECT temp_table_1.name
FROM original_table_1 temp_table_1
LEFT JOIN original_table_2 temp_table_2 ON temp_table_2.name = temp_table_1.name
WHERE temp_table_2.name IS NULL

Und ich habe gesehen, dass in mySQL Syntax in FROM Kommas zwischen Tabellennamen benötigt, aber in sqlLite scheint es lieber das Leerzeichen zu haben.

Am Ende führt die Verwendung schlechter Variablennamen zu Fragen. Meine Variablen sollten sinnvoller sein. Und jemand sollte erklären, warum wir ein Komma brauchen oder keins.

3voto

jawahar Punkte 31

Siehe Anfrage:

SELECT * FROM Table1 WHERE
id NICHT IN (SELECT 
        e.id
    FROM
        Table1 e
            INNER JOIN
        Table2 s ON e.id = s.id);

Konzeptionell würde sein: Abrufen der übereinstimmenden Datensätze in der Unterabfrage und dann in der Hauptabfrage die Datensätze abrufen, die nicht in der Unterabfrage sind.

0voto

Nauman Bashir Punkte 11

Ich habe alle oben genannten Lösungen ausprobiert, aber sie haben in meinem Fall nicht funktioniert. Die folgende Abfrage hat bei mir funktioniert.

SELECT NAME
FROM   table_1
WHERE  NAME NOT IN
       (SELECT    a.NAME
        FROM      table_1 AS a
        LEFT JOIN table_2 AS b
        ON        a.NAME = b.NAME
        WHERE     any further condition);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X