Cách xóa nhiều hàng trong SQL trong đó id = (x đến y)


86

Tôi đang cố gắng chạy truy vấn SQL để xóa các hàng có id là 163 đến 265 trong bảng

Tôi đã thử điều này để xóa ít hàng hơn

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

Nhưng khi nói đến xóa 100 hàng cùng một lúc, Có bất kỳ truy vấn nào tương tự như phương pháp trên Tôi cũng đang cố gắng sử dụng loại truy vấn này nhưng không thực hiện được không

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

Vui lòng cho tôi biết truy vấn để thực hiện hành động trên ...



Đây không phải là một nhân đôi từ nêu trên ... khác liên quan đến xóa trong phạm vi của liền kề của, câu hỏi ở đây đề cập đến xóa có thể không liên tiếp id, một danh sách các id ..
Merak Marey

Câu trả lời:


187

Nếu bạn cần xóa dựa trên danh sách, bạn có thể sử dụng IN:

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

Nếu bạn cần xóa dựa trên kết quả của một truy vấn, bạn cũng có thể sử dụng IN:

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

(Lưu ý rằng truy vấn con chỉ được trả về một cột)

Nếu bạn cần xóa dựa trên phạm vi giá trị, bạn sử dụng BETWEENhoặc bạn sử dụng các bất đẳng thức:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

hoặc là

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

1
Cảm ơn bạn! Tôi đã sử dụng BETWEEN và nó được thực thi thành công theo yêu cầu của tôi.
balu zapps

10
@baluzapps Nếu bạn thấy câu trả lời này hữu ích, hãy chấp nhận nó;)
Barranka

Một câu hỏi liên quan đến vấn đề này: Nếu tôi có khóa tổng hợp thì sao?
Mayur Beldar

1
@MayurBeldar: nếu bạn có câu hỏi mới, hãy đăng câu hỏi đó dưới dạng câu hỏi , không phải dưới dạng nhận xét
Barranka

21

Bạn có thể sử dụng BETWEEN:

DELETE FROM table
where id between 163 and 265

2

Hãy thử cái này:

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

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

2
Bạn có thể vui lòng định dạng mã của mình bằng cách đánh dấu nó và nhấn Ctrl + K
WhatsThePoint

4
Tôi không nghĩ đó là đúng cú pháp cho một deletetuyên bố
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

Nhận xóa giá trị chuỗi

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.