Ich habe eine Tabelle mit vielen (> 20.000) Datensätzen. Es ist an der Zeit, diese etwas zu säubern, da Anfragen dazu führen, dass viele Ressourcen genutzt werden. Ich habe eine andere (temporäre) Tabelle mit einer letzten Datensätze. Alle Datensätze in der ersten Tabelle, die im zweiten nicht existieren, können gehen. Allerdings muss ich wegen einiger Joins die ID für die letzten Datensätze behalten, damit ich nicht einfach TRUNCATE und dann die Tabelle kopieren kann. Gibt es eine Möglichkeit, dies zu tun?Entfernen aller Datensätze aus einer Tabelle, die nicht in einer anderen Tabelle vorhanden sind
Antwort
DELETE FROM old_table WHERE id NOT IN (SELECT id FROM temp_table)
Edit:
id NOT IN (SELECT id FROM temp_table)
ist eine lausige Konstruktion. Wenn Sie große Tabellen haben und Ihre Servereinstellungen auf wenig Speicher eingestellt sind, werden Sie dies für immer ausführen.
@Piskvor Die Antwort ist eine längere, aber eine viel bessere Abfrage, die am besten auf Low-Memory-Setups funktioniert. Und wenn ich "wenig Speicher" sage, meine ich Datenbankserver, die keinen vollen High-End-Computer aufnehmen, also so ziemlich jedes System, das eine kleine Unternehmenswebsite oder ähnliches verwaltet.
Danke, das war sehr hilfreich. Ich möchte jedoch etwas für zukünftige Referenz hinzufügen: Sie sollten ID mit Ihrem einzigartigen Wert ersetzen. Für mich war es der Artikelname, da die Record IDs in den beiden Tabellen nicht übereinstimmten. –
Dies gibt Ihnen die id
s die Zeilen, die nicht über eine entsprechende Zeile haben (durch recordid
Spalt angepasst - Ich kann anders sein) in der anderen Tabelle:
SELECT t1.id
FROM firsttable t1
LEFT JOIN secondtable t2
WHERE t1.recordid = t2.recordid
AND t2.id IS NULL
, dass Sie das überprüfen kann Sie wählen tatsächlich die richtigen Zeilen zum Löschen aus. Dann stecken Sie es in ein LÖSCHEN:
DELETE FROM firsttable WHERE firsttable.id IN (
SELECT t1.id
FROM firsttable t1
LEFT JOIN secondtable t2
WHERE t1.recordid = t2.recordid
AND t2.id IS NULL
)
- 1. MySQL, wie Datensätze in einer Tabelle zu entfernen, die in einer anderen Tabelle sind
- 2. Wählen Sie Datensätze aus, die nicht in einer anderen Tabelle vorhanden sind.
- 3. Wählen Sie alle Datensätze aus einer Tabelle, die nicht in einer anderen Tabelle in Laravel 5.1
- 4. Auswahl von Zeilen aus einer Tabelle, die nicht in einer anderen Tabelle mit h2 sind
- 5. Wählen Sie Datensätze, die nicht in einer anderen Tabelle in Entity Framework vorhanden sind
- 6. Wie wählt man alle Datensätze aus einer Tabelle, die nicht in einer anderen Tabelle existieren?
- 7. alle Datensätze einer Tabelle löschen, die nicht aus einer anderen Tabelle
- 8. SQL Server Wählen Sie die höchsten Datensätze aus einer Tabelle in einer anderen Tabelle
- 9. SQL: Einfügen aller Datensätze aus einer Tabelle in eine andere Tabelle ohne die Spalten
- 10. Ziehen Daten aus einer anderen Tabelle, wenn Daten, die sich in einer Tabelle nicht verfügbar ist
- 11. JOIN der Tabelle, wenn Datensätze vorhanden sind
- 12. Erhalten Sie Datensätze aus einer Tabelle und einer entsprechenden Tabelle
- 13. Wie wähle ich alle IDs, die in einer Tabelle vorhanden sind, aber nicht in einem anderen
- 14. Überprüfen, ob Datensätze in einer Tabelle vorhanden sind, die nicht existieren
- 15. Wie lösche Zeilen in einer Teradata-Tabelle, die nicht in einer anderen Tabelle sind?
- 16. Tabelle von Wert aus einer anderen Tabelle
- 17. T-SQL-Spalte, die angibt, dass ein oder mehrere Datensätze in einer separaten Tabelle vorhanden sind
- 18. 3 zufällige Datensätze aus einer Tabelle erhalten
- 19. Abrufen aller Datensätze in einer Tabelle mit nHibernate
- 20. Löschen Sie die gleichen Werte aus einer anderen db-Tabelle
- 21. Entfernen aller Zeilen aus einer Tabelle mit JPA
- 22. SQLite zum Löschen aller Datensätze in einer Tabelle
- 23. Kopieren von Daten aus einer Tabelle in einer anderen neue Tabelle, wo Spalten sind unbekannt
- 24. Pass einen Wert aus einer Tabelle zu einer anderen Tabelle
- 25. Ändern einer Tabelle basierend auf Daten aus einer anderen Tabelle
- 26. RethinkDB: von Array in einer Tabelle nach Wert aus einer anderen Tabelle zu entfernen Artikel
- 27. Update-Tabelle auf Bedingungen aus einer anderen Tabelle basiert
- 28. Alle Datensätze aus einer Tabelle löschen
- 29. Wählen Sie alle Elemente in einer Tabelle aus, die nicht in einem Fremdschlüssel einer anderen Tabelle enthalten sind
- 30. MYSQL - Finden Sie Datensätze aus einer Tabelle, die in einem anderen nicht existieren
Könnten Sie ein wenig verdeutlichen? Möchten Sie Einträge aus den Recent-Datensätzen oder aus der größeren Tabelle entfernen? – SilverSkin
Beachten Sie, dass für eine Datenbank 20k Zeilen tatsächlich eine * kleine * Tabelle sind. Wenn Sie dort Leistungsprobleme haben, möchten Sie vielleicht einen Blick auf die Indizes der relevanten Tabellen werfen. – Piskvor
Hallo, dies ist für einen ZenCart-Webshop, und jedes Mal, wenn die Seite geladen wird, versucht es viel zu wählen. –