SQL WHERE 조건이 같지 않습니까?


답변:


158

이렇게 할 수 있습니다

DELETE FROM table WHERE id NOT IN ( 2 )

또는

DELETE FROM table WHERE id <>  2 

@Frank Schmitt가 언급했듯이 NULL 값에 대해서도주의해야 할 수 있습니다. 2NULL을 포함하여 그렇지 않은 모든 것을 삭제하려면 OR id IS NULLWHERE 절에 추가하십시오 .


이 명령을 몇 번 시도했습니다. 그러나 MySQL의 DELETE가 * ..를 사용하지 않는다는 것을
알기

이제 답변을 수정했습니다. * 지적 해 주셔서 감사합니다.
Praveen Lobo

5
!= NULL작동하지 않는지 궁금해하는 사람들을위한 일반적인 설명입니다 . "NULL을 테스트하기 위해 =, <또는 <>와 같은 산술 비교 연산자를 사용할 수 없습니다." ( MySQL 문서에서 ). 그 수단 그래서 당신은 사용해야합니다 IS NOT NULL .
Byson 2014-08-20

31

귀하의 질문은 이미 다른 포스터에 의해 답변되었습니다.

 delete from table where id <> 2

(또는 그 변형, id = 2 등이 아님)은 id가 NULL 인 행을 삭제하지 않습니다.

id = NULL 인 행도 삭제하려는 경우 :

delete from table where id <> 2 or id is NULL

12
delete from table where id <> 2



편집 : MySQL의 구문을 수정하려면


11

다음을 수행 할 수 있습니다.

DELETE * FROM table WHERE NOT(id = 2);

1
값이 숫자가 아닌 경우 잘 작동합니다. WHERE NOT (id = 'two');
Kareem


7

형식 논리와 대수로 돌아갑니다. 같은 표현

A & B & (D | E)

두 가지 방법으로 부정 될 수 있습니다.

  • 명백한 방법 :

    !( A & B & ( D | E ) )
  • 위의 내용을 다시 설명 할 수도 있습니다. 논리 표현식의 몇 가지 속성 만 기억하면됩니다.

    • !( A & B )와 동일 (!A | !B)합니다.
    • !( A | B )와 동일 (!A & !B)합니다.
    • !( !A ) (A)와 동일합니다.

    적용되는 전체 표현식에 NOT (!)을 배포하여 연산자를 반전하고 진행하면서 이중 음수를 제거합니다.

        !A | !B | ( !D & !E )

따라서 일반적으로 모든 where 절은 위의 규칙에 따라 부정 될 수 있습니다. 이것의 부정

select *
from foo
where      test-1
  and      test-2
  and (    test-3
        OR test-4
      )

이다

select *
from foo
where NOT(          test-1
           and      test-2
           and (    test-3
                 OR test-4
               )
         )

또는

select *
from foo
where        not test-1
  OR         not test-2
  OR   (     not test-3
         and not test-4
       )

어떤게 더 좋아? 매우 상황에 맞는 질문입니다. 당신 만이 결정할 수 있습니다.

그러나 NOT을 사용하면 옵티마이 저가 할 수있는 작업과 할 수없는 작업에 영향을 미칠 수 있습니다. 최적이 아닌 쿼리 계획을 얻을 수 있습니다.


6

WHERE id <> 2 잘 작동해야합니다 ... 그게 당신이 추구하는 것입니까?


4

예. 기억이 나에게 도움이된다면 그것은 작동 할 것입니다. 우리는 다음을 사용할 수 있습니다.

DELETE FROM table WHERE id <> 2

3

가장 좋은 해결책은

DELETE FROM table WHERE id NOT IN ( 2 )

0

저는이 문제를 해결하고있었습니다. <>를 사용하거나 변수에없는 경우, 즉 null이면 false가됩니다. 따라서 <> 1 대신 다음과 같이 확인해야합니다.

 AND (isdelete is NULL or isdelete = 0)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.