İd = (x'den y'ye) SQL'de birden çok satır nasıl silinir


86

Bir tablodaki 163 ile 265 arası kimliği olan satırları silmek için bir SQL sorgusu çalıştırmaya çalışıyorum

Bunu daha az sayıda satırı silmeyi denedim

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

Ancak, bir seferde 100'lerce satırı silmek söz konusu olduğunda, yukarıdaki yönteme benzer herhangi bir sorgu var mı?

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

Lütfen yukarıdaki eylemi yapmak için bana sorguyu söyleyin ...



Bu sözü yukarıdan değil yineleniyor ... diğer inşaası aralığında silinmesi ile ilgilidir, bu soru mümkün olmayan ardışık id en, .. kimlikleri listesi silinmesi anlamına gelir
Merak Marey

Yanıtlar:


190

Bir listeye göre silmeniz gerekiyorsa, şunları kullanabilirsiniz IN:

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

Bir sorgunun sonucuna göre silmeniz gerekirse, şunları da kullanabilirsiniz IN:

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

(Alt sorgunun yalnızca bir sütun döndürmesi gerektiğine dikkat edin)

Bir değer aralığına göre silmeniz gerekiyorsa, ya kullanırsınız BETWEENya da eşitsizlikleri kullanırsınız:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

veya

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

1
Teşekkür ederim! BETWEEN kullandım ve ihtiyacıma göre başarıyla uygulandı.
balu zapps

10
@baluzapps Bu yanıtı faydalı bulursanız, kabul edin;)
Barranka

Bununla ilgili bir soru: Bileşik anahtarım varsa ne olur?
Mayur Beldar

1
@MayurBeldar: Yeni bir sorunuz varsa , yorum olarak değil, soru olarak
gönderin

21

Şunları kullanabilirsiniz BETWEEN:

DELETE FROM table
where id between 163 and 265

2

Lütfen şunu deneyin:

DELETE FROM `table` WHERE id >=163 and id<= 265

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

2
Lütfen kodunuzu vurgulayıp Ctrl + K
WhatsThePoint

4
Bunun bir deleteifade için doğru sözdizimi olduğunu sanmıyorum
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

Dize değeri silme alın

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.