id = (x에서 y) 인 SQL에서 여러 행을 삭제하는 방법


86

테이블에서 ID가 163-265 인 행을 삭제하기 위해 SQL 쿼리를 실행하려고합니다.

나는 더 적은 수의 행을 삭제하려고 시도했습니다.

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

그러나 한 번에 100 개의 행을 삭제할 때 위의 방법과 비슷한 쿼리가 있습니까? 이런 종류의 쿼리를 사용하려고했지만 실행하지 못했습니다.

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

위의 작업을 수행하기위한 쿼리를 알려주십시오.



이것은 위에서 언급 한 것과 중복되지 않습니다. 다른 하나는 연속 된 범위의 삭제와 관련이 있습니다.이 질문은 가능한 비 연속 ID, ID 목록의 삭제와 관련이 있습니다.
Merak Marey

답변:


190

목록을 기반으로 삭제해야하는 경우 다음을 사용할 수 있습니다 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 2013

10
도움이 답을 찾기 경우 @baluzapps은 그것을 받아 들일)
Barranka

이와 관련된 질문 : 복합 키가 있으면 어떻게합니까?
Mayur Beldar

1
@MayurBeldar : 당신은 새로운 질문이있는 경우, 게시 질문으로 하지 주석으로,
Barranka

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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.