Heim >Datenbank >MySQL-Tutorial >Wie wähle ich Datensätze aus Tabelle2 aus, wobei diejenigen mit übereinstimmenden Namen in Tabelle1 ausgeschlossen werden?
Aus einer Tabelle auswählen, um Datensätze aus einer anderen Tabelle auszuschließen
Frage:
Gegeben zwei Tabellen, Tabelle1 enthält die Spalten ID und Name, Tabelle2 enthält die Spalten ID und Name. Rufen Sie alle Zeilen in Tabelle2 ab, deren Namenswert nicht in Tabelle1 enthalten ist.
Vorgeschlagene Abfrage (falsch):
<code class="language-sql">SELECT name FROM table2 -- that are not in table1 already</code>
Lösung:
Eine genauere Abfrage, um die gewünschten Ergebnisse zu erhalten, ist:
<code class="language-sql">SELECT t2.name FROM table2 t2 LEFT JOIN table1 t1 ON t1.name = t2.name WHERE t1.name IS NULL;</code>
Erklärung:
Diese Abfrage verwendet einen linken Join, um jede Zeile in Tabelle2 basierend auf der Namensspalte mit der entsprechenden Zeile in Tabelle1 abzugleichen. Wenn in Tabelle 1 keine passende Zeile gefunden wird, ist der t1.name-Wert für diese Zeile in den Ergebnissen NULL. Indem wir nur die Zeilen auswählen, in denen t1.name NULL ist, schließen wir effektiv Datensätze in Tabelle2 aus, die übereinstimmende Namenswerte in Tabelle1 haben. Alternativ kann die NOT EXISTS
-Klausel verwendet werden, um das gleiche Ergebnis zu erzielen:
<code class="language-sql">SELECT name FROM table2 t2 WHERE NOT EXISTS ( SELECT 1 FROM table1 t1 WHERE t1.name = t2.name );</code>
Die NOT EXISTS
-Version ist im Allgemeinen effizienter als die LEFT JOIN
-Version, insbesondere bei großen Datensätzen.
Das obige ist der detaillierte Inhalt vonWie wähle ich Datensätze aus Tabelle2 aus, wobei diejenigen mit übereinstimmenden Namen in Tabelle1 ausgeschlossen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!