วิธีลบหลายแถวใน SQL โดยที่ id = (x ถึง y)


86

ฉันพยายามเรียกใช้แบบสอบถาม SQL เพื่อลบแถวที่มีรหัส 163 ถึง 265 ในตาราง

ฉันพยายามนี้เพื่อลบจำนวนแถวที่น้อยลง

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

แต่เมื่อพูดถึงการลบ 100 แถวในแต่ละครั้งมีข้อความค้นหาใดที่คล้ายกับวิธีการข้างต้นหรือไม่ฉันพยายามใช้แบบสอบถามประเภทนี้ แต่ไม่สามารถดำเนินการได้

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

โปรดบอกแบบสอบถามเพื่อดำเนินการข้างต้น ...



นี่ไม่ใช่สิ่งที่ซ้ำกันจากที่กล่าวมาข้างต้น ... ส่วนอีกข้อเกี่ยวข้องกับการลบในช่วงของผู้บริหารคำถามในนี้หมายถึงการลบ ID ที่ไม่ต่อเนื่องที่เป็นไปได้รายการรหัส ..
Merak Marey

คำตอบ:


190

หากคุณต้องการลบตามรายการคุณสามารถใช้IN:

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

หากคุณต้องการลบตามผลลัพธ์ของแบบสอบถามคุณยังสามารถใช้IN:

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

(สังเกตว่าแบบสอบถามย่อยต้องส่งคืนคอลัมน์เดียวเท่านั้น)

หากคุณต้องการลบตามช่วงของค่าไม่ว่าคุณจะใช้BETWEENหรือคุณใช้อสมการ:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

หรือ

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

1
ขอขอบคุณ! ฉันได้ใช้ BETWEEN และดำเนินการสำเร็จตามความต้องการของฉัน
balu zapps

10
@baluzapps หากคุณพบว่าคำตอบนี้มีประโยชน์ยอมรับมัน;)
Barranka

คำถามที่เกี่ยวข้อง: จะเกิดอะไรขึ้นถ้าฉันมีคีย์ผสม?
Mayur Beldar

1
@ MayurBeldar: หากคุณมีคำถามใหม่โพสต์เป็นคำถามไม่ใช่แสดงความคิดเห็น
Barranka



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

2
คุณช่วยจัดรูปแบบโค้ดของคุณโดยการไฮไลต์และกด Ctrl + K
WhatsThePoint

4
ฉันไม่คิดว่ามันเป็นไวยากรณ์ที่ถูกต้องสำหรับdeleteคำสั่ง
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

รับค่าสตริงลบ

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.