Як видалити кілька рядків у 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 = )

Скажіть мені, будь ласка, запит, щоб виконати вищевказану дію ...



Це не повторюється з вищезазначеного ... інше стосується видалення в діапазоні послідовних, питання в цьому стосується видалення можливих непослідовних ідентифікаторів, списку ідентифікаторів.
Мерак Марей

Відповіді:


186

Якщо вам потрібно видалити на основі списку, ви можете використовувати 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
Дякую! Я використовував МІЖ і його успішно виконував на мою вимогу.
balu zapps

10
@baluzapps Якщо вам відповідь корисна, прийміть її;)
Barranka

Питання, пов’язане з цим: Що робити, якщо у мене є складений ключ?
Mayur Beldar

1
@MayurBeldar: якщо у вас є нове запитання, опублікуйте його як запитання , а не як коментар
Barranka

21

Ви можете використовувати BETWEEN:

DELETE FROM table
where id between 163 and 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.