Как удалить несколько строк в SQL, где id = (x to 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 = )

Скажите, пожалуйста, запрос на выполнение вышеуказанного действия ...



Это не повторяется из вышеупомянутого ... другое относится к удалению в диапазоне последовательных, вопрос в этом относится к удалению возможных непоследовательных идентификаторов, списка идентификаторов ..
Мерак Марей,

Ответы:


187

Если вам нужно удалить на основе списка, вы можете использовать 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 Если вы найдете этот ответ полезным, примите его;)
Барранка

В связи с этим возник вопрос: что делать, если у меня есть составной ключ?
Маюр Белдар

1
@MayurBeldar: если у вас есть новый вопрос, опубликуйте его как вопрос , а не как комментарий
Барранка



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

2
Не могли бы вы отформатировать свой код, выделив его и нажав Ctrl + K
WhatsThePoint

4
Я не думаю, что это правильный синтаксис для deleteутверждения
Фабрицио

-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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.