Heim  >  Artikel  >  Datenbank  >  Wie lösche ich Datensätze basierend auf einem bestimmten Kriterium in MySQL mithilfe von Unterabfragen?

Wie lösche ich Datensätze basierend auf einem bestimmten Kriterium in MySQL mithilfe von Unterabfragen?

DDD
DDDOriginal
2024-11-09 22:08:02537Durchsuche

How to Delete Records Based on a Specific Criteria in MySQL using Subqueries?

Verwendung von Unterabfragen zur Datenbearbeitung in MySQL

Die vorliegende Aufgabe besteht darin, Datensätze basierend auf einem bestimmten Kriterium selektiv aus einer Tabelle zu löschen. Durch die Nutzung von Unterabfragen können wir dies mit MySQL erreichen.

Betrachten wir zunächst die folgende Abfrage:

DELETE FROM posts WHERE id NOT IN
(SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15)

Diese Abfrage zielt darauf ab, Beiträge zu löschen, die nicht zu den letzten 15 Datensätzen gehören. wie durch das Feld „Zeitstempel“ geordnet. Bei MySQL-Versionen vor 8.0 tritt jedoch ein Fehler auf, wenn versucht wird, eine LIMIT-Klausel mit einer IN-Unterabfrage zu kombinieren.

Um diese Einschränkung zu überwinden, können wir einen Workaround für verschachtelte Unterabfragen verwenden. Die überarbeitete Abfrage lautet:

DELETE 
FROM posts 
WHERE id NOT IN (
      SELECT * FROM (
            SELECT id 
            FROM posts 
            ORDER BY timestamp DESC LIMIT 0, 15
      ) 
      AS t);

In dieser neu geschriebenen Abfrage erstellen wir eine innere Unterabfrage, um die IDs der letzten 15 Beiträge abzurufen. Die äußere Unterabfrage versieht die Ergebnisse dann mithilfe der „AS t“-Klausel mit einem Alias.

Durch die Verwendung dieses Ansatzes mit verschachtelten Unterabfragen können wir effektiv das gewünschte Ergebnis erzielen, selbst mit älteren MySQL-Versionen, die keine vollständige Unterstützung für die Kombination von LIMIT und IN bieten .

Das obige ist der detaillierte Inhalt vonWie lösche ich Datensätze basierend auf einem bestimmten Kriterium in MySQL mithilfe von Unterabfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn