Jak usunąć z tabeli, w której ID znajduje się na liście identyfikatorów?

91

jeśli mam listę identyfikatorów (1,4,6,7) i tabelę db, w której chcę usunąć wszystkie rekordy, w których identyfikator znajduje się na tej liście, jaki jest sposób, aby to zrobić?

leora
źródło

Odpowiedzi:

168

Twoje pytanie prawie pisze w języku SQL:

DELETE FROM table WHERE id IN (1, 4, 6, 7)
Matti Virkkunen
źródło
@jayarjo: Jakakolwiek różnica byłaby prawdopodobnie nieistotna i nie sądzę, aby był jakikolwiek powód, dla którego usuwanie pojedynczo i tak byłoby bardziej wydajne.
Matti Virkkunen
Właśnie tam wydajność może uderzyć w wygodę. Na przykład mam już funkcje, które wykonują to jedna po drugiej. Ale gdyby była szansa na wzrost wydajności, mógłbym napisać dodatkowy kod, w przeciwnym razie prawdopodobnie nie będzie tego wart.
jayarjo
8
Jeden po drugim prawie na pewno byłby wolniejszy, z pewnością na Oracle lub PostgreSQL. Podział operacji SQL na wiele mniejszych operacji to świetny sposób na uzyskanie złej wydajności.
David Aldridge,
1
Okazało się, że 10000 pozycji w klauzuli In zajęło około 200 sekund, ale 1000 zajęło 3 sekundy (lub 30 sekund w znormalizowanym porównaniu). Rozmiar ma znaczenie.
ohmusama,
12
delete from t
where id in (1, 4, 6, 7)
Carl Manaster
źródło