Как удалить несколько строк в 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 = )

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

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

Ответы:

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: если у вас есть новый вопрос, опубликуйте его как вопрос , а не как комментарий
Барранка
21

Вы можете использовать BETWEEN:

DELETE FROM table
where id between 163 and 265
леппи
источник
2

Пожалуйста, попробуйте это:

DELETE FROM `table` WHERE id >=163 and id<= 265
Кирти
источник
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>
ThienPhuc
источник