Mam tabelę z wieloma (> 20 000) rekordami. Czas trochę je posprzątać, ponieważ pytania zaczynają się na wiele regresów. Mam inny (tymczasowy) tabelę z rekordami ostatnich. Wszystkie rekordy w pierwszej tabeli, które nie istnieją w drugiej, mogą przejść. Muszę jednak zachować identyfikatory dla ostatnich rekordów z powodu niektórych złączeń, więc nie mogę po prostu PRZETRWAĆ, a następnie skopiować tabelę. Czy jest jakiś sposób, aby to zrobić?Usuwanie wszystkich rekordów z tabeli, która nie istnieje w innej tabeli
Odpowiedz
DELETE FROM old_table WHERE id NOT IN (SELECT id FROM temp_table)
Edit:
id NOT IN (SELECT id FROM temp_table)
jest kiepska konstrukcja. Jeśli masz duże tabele, a twoje ustawienia serwera są dostrojone do niskiej ilości pamięci, uruchomisz to na zawsze.
@Piskvor Odpowiedź jest dłuższa, ale o wiele lepsza, która będzie działać najlepiej w przypadku konfiguracji z małą pamięcią. A kiedy mówię "low memory", mam na myśli serwery baz danych, które nie zajmują pełnego komputera klasy high-end, a więc prawie każdy system, który zarządza małą witryną biznesową lub podobnymi rzeczami.
Dziękuję, to było bardzo pomocne. Chciałbym jednak dodać coś na przyszłość: powinieneś zastąpić 'id' swoją unikalną wartością. Dla mnie była to nazwa artykułu, ponieważ identyfikator rekordu nie pasował do dwóch tabel. –
To daje id
s wierszy, które nie mają odpowiedniego wiersza (dopasowane recordid
kolumnie - twój może być inna) w drugiej tabeli:
SELECT t1.id
FROM firsttable t1
LEFT JOIN secondtable t2
WHERE t1.recordid = t2.recordid
AND t2.id IS NULL
, która pozwala na sprawdzenie, faktycznie wybierasz właściwe wiersze do usunięcia. Następnie podłącz go do DELETE:
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. Usuwanie wszystkich rekordów z tabeli, które nie zostały pobrane z innej tabeli
- 2. Usuwanie duplikatów rekordów z tabeli
- 3. Usuwanie z tabeli z milionami rekordów
- 4. Left Outer Join nie zwraca wszystkich rekordów z podstawowej tabeli
- 5. Wyszukiwanie rekordów z dwoma określonymi rekordami w innej tabeli
- 6. Usuwanie duplikatów z dużej tabeli
- 7. Aktualizacja tabeli z wartościami z innej tabeli
- 8. Aktualizacja tabeli SQL z losowych wartości z innej tabeli
- 9. Usuwanie oparte na kluczu złożonym z innej tabeli
- 10. Usuwanie rekordów z tabeli programu SQL Server bez kursora
- 11. usuwanie wierszy z SELECT na podstawie kolumn w innej tabeli
- 12. SQL: Wstaw dane z innej tabeli w tabeli, która zawiera klucze obce
- 13. MySQL - skręcić w tabeli do innej tabeli
- 14. Wstaw rekord do tabeli, jeśli wpis nie istnieje w innej tabeli - z dodatkowym wykręceniem
- 15. Usuwanie z tabeli z adnotacją @OneToOne
- 16. Wybierz z tabeli A, które nie istnieje w tabeli B
- 17. R: Dodaj kolumnę do tabeli z danymi z innej tabeli
- 18. Usuwanie wszystkich powiązanych rekordów z wielu tabel
- 19. usuwanie wierszy w jednej tabeli na podstawie wartości rzędu w tej i innej tabeli
- 20. Usuwanie zduplikowanych wierszy z tabeli
- 21. Usuwanie wszystkich wierszy z tabeli za pomocą JPA
- 22. Usuwanie zduplikowanych wierszy z tabeli BigQuery
- 23. Aktualizacja tabeli przy użyciu losowo wielu wartości w innej tabeli
- 24. Wiersz UPDATE, gdy pasujący wiersz istnieje w innej tabeli
- 25. Zaawansowane zapytanie MySql: Aktualizacja tabeli z informacjami z innej tabeli
- 26. Usuwanie wierszy tabeli w javascript
- 27. Oracle: Wstawianie danych rowtype do innej tabeli
- 28. Wybierz wszystkie rekordy z jednej tabeli, które nie istnieją w innej tabeli w Laravel 5.1
- 29. Jak zaktualizować dane w jednej tabeli z odpowiednich danych w innej tabeli w SQL Server 2005
- 30. Eliminowanie duplikatów rekordów w tabeli BigQuery
Czy mógłbyś trochę wyjaśnić? Czy chcesz usunąć wpisy z ostatnich rekordów lub z większej tabeli? – SilverSkin
Należy zauważyć, że w przypadku bazy danych 20k wierszy jest w rzeczywistości * małą * tabelą. Jeśli masz problemy z wydajnością, możesz chcieć profilować i patrzeć na odpowiednie indeksy tabel. – Piskvor
Witam, to jest dla sklepu internetowego ZenCart i za każdym razem, gdy strona jest ładowana, próbuje WYBRAĆ dużo. –