如何在SQL中删除多行,其中id =(x到y)

122

我试图运行一个SQL查询,以删除表中ID为163到265的行。

我尝试使用以下代码来删除较少数量的行:

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

但是当需要一次删除数百行时,是否有类似上述方法的查询?我也尝试使用这种查询,但未能执行成功。

    DELETE FROM `table` WHERE id IN (SELECT * FROM table WHERE id = )
请告诉我执行上述操作的查询语句...

1
可能是SQL在特定范围内删除记录的重复问题。 - user964769
1
这不是与上述重复的内容...另一个涉及连续范围内的删除,而此问题涉及可能非连续ID的删除,即ID列表。 - Merak Marey
5个回答

250
如果您需要根据列表删除内容,可以使用 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;

3
谢谢!我使用了BETWEEN并且已经成功地执行到我想要的结果。 - balu zapps
10
如果您发现这个答案有用,请接受它 ;) - Barranka
一个与此相关的问题: 如果我有复合键怎么办? - Mayur Beldar
1
@MayurBeldar:如果你有新的问题,请将其作为问题发布,而不是作为评论。 - Barranka

32

您可以使用 BETWEEN

DELETE FROM table
where id between 163 and 265

6
请尝试以下操作:
DELETE FROM `table` WHERE id >=163 and id<= 265

0
SELECT * FROM your_table ORDER BY DESC

获取您想要删除的范围,例如:从3到10

 DELETE FROM your_table
 WHERE id BETWEEN 3 AND 10;

确保在BETWEEN子句中先添加最小值


-7
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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接