Cómo eliminar varias filas en SQL donde id = (xay)

86

Estoy tratando de ejecutar una consulta SQL para eliminar filas con ID 163 a 265 en una tabla

Intenté esto para eliminar menos filas

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

Pero cuando se trata de eliminar cientos de filas a la vez, ¿hay alguna consulta similar al método anterior? También estoy tratando de usar este tipo de consulta pero no pude ejecutarla

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

Por favor dígame la consulta para realizar la acción anterior ...

balu zapps
fuente
Esto no es un duplicado de lo mencionado anteriormente ... el otro se relaciona con la eliminación en el rango de consecutivos, la pregunta en esto se refiere a la eliminación de posibles identificaciones no consecutivas, una lista de identificaciones ..
Merak Marey

Respuestas:

186

Si necesita eliminar en función de una lista, puede usar IN:

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

Si necesita eliminar según el resultado de una consulta, también puede usar IN:

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

(Tenga en cuenta que la subconsulta debe devolver solo una columna)

Si necesita eliminar en función de un rango de valores, use BETWEENo use desigualdades:

DELETE FROM your_table
WHERE id BETWEEN bottom_value AND top_value;

o

DELETE FROM your_table
WHERE id >= a_value AND id <= another_value;
Barranka
fuente
1
¡Gracias! He utilizado BETWEEN y se ejecutó con éxito según mis requisitos.
balu zapps
10
@baluzapps Si encuentra útil esta respuesta, acéptela;)
Barranka
Una pregunta relacionada con esto: ¿Qué pasa si tengo una clave compuesta?
Mayur Beldar
1
@MayurBeldar: si tiene una nueva pregunta, publíquela como una pregunta , no como un comentario
Barranka
21

Puede utilizar BETWEEN:

DELETE FROM table
where id between 163 and 265
leppie
fuente
2

Por favor intente esto:

DELETE FROM `table` WHERE id >=163 and id<= 265
Keerthi
fuente
1
Delete Id from table where Id in (select id from table)
Denny
fuente
2
¿Podría formatear su código resaltándolo y presionando Ctrl + K
WhatsThePoint
4
No creo que sea la sintaxis correcta para una deletedeclaración
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

Obtener valor de cadena eliminar

<RecordList>
    <ID>1</ID>
    <ID>2</ID>
</RecordList>
ThienPhuc
fuente