Jak usunąć wiele wierszy w SQL, gdzie id = (x do y)


86

Próbuję uruchomić zapytanie SQL, aby usunąć wiersze o identyfikatorach 163 do 265 w tabeli

Próbowałem usunąć mniejszą liczbę wierszy

    DELETE FROM `table` WHERE id IN (264, 265)

Ale jeśli chodzi o usuwanie 100 wierszy naraz, czy jest jakieś zapytanie podobne do powyższej metody, próbuję również użyć tego rodzaju zapytania, ale nie udało mi się go wykonać

    DELETE FROM `table` WHERE id IN (SELECT * FROM table WHERE id = )

Proszę powiedz mi zapytanie, aby wykonać powyższą akcję ...



To nie jest duplikatem powyższego ... druga dotyczy usunięcia w zakresie kolejnych, pytanie w tym dotyczy usunięcia ewentualnych niekolejnych identyfikatorów, listy identyfikatorów ..
Merak Marey

Odpowiedzi:


186

Jeśli chcesz usunąć na podstawie listy, możesz użyć IN:

DELETE FROM your_table
WHERE id IN (value1, value2, ...);

Jeśli chcesz usunąć na podstawie wyniku zapytania, możesz również użyć IN:

DELETE FROM your_table
WHERE id IN (select aColumn from ...);

(Zauważ, że podzapytanie musi zwracać tylko jedną kolumnę)

Jeśli chcesz usunąć na podstawie zakresu wartości, albo BETWEENużywasz nierówności , albo używasz:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

lub

DELETE FROM your_table
WHERE id >= a_value AND id <= another_value;

1
Dziękuję Ci! Użyłem BETWEEN i został pomyślnie wykonany zgodnie z moimi wymaganiami.
balu zapps

10
@baluzapps Jeśli uznasz tę odpowiedź za przydatną, zaakceptuj ją;)
Barranka

Pytanie związane z tym: co jeśli mam klucz złożony?
Mayur Beldar

1
@MayurBeldar: jeśli masz nowe pytanie, opublikuj je jako pytanie , a nie jako komentarz
Barranka

21

Możesz użyć BETWEEN:

DELETE FROM table
where id between 163 and 265


1
Delete Id from table where Id in (select id from table)

2
Czy mógłbyś sformatować kod, podświetlając go i naciskając Ctrl + K
WhatsThePoint

4
Nie sądzę, żeby to była właściwa składnia dla deleteoświadczenia
Fabrizio,

-6
CREATE PROC [dbo].[sp_DELETE_MULTI_ROW]       
@CODE XML
,@ERRFLAG  CHAR(1) = '0' OUTPUT    

AS        

SET NOCOUNT ON  
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  

DELETE tb_SampleTest
    WHERE 
        CODE IN(
            SELECT Item.value('.', 'VARCHAR(20)')
            FROM  @CODE.nodes('RecordList/ID') AS x(Item)
            )

IF @@ROWCOUNT = 0
    SET @ERRFLAG = 200

SET NOCOUNT OFF

Uzyskaj usunięcie wartości ciągu

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.