2011-09-24 3 views
1

2 개의 distict 행을 삭제하고 싶지만 simular 데이터가 있습니다. 3 개의 열, 1은 고유하며 다른 2는 전환됩니다. 이런 식으로 사용했지만 1 만 삭제합니다.2 행 1을 삭제 SQL 문을 mysql

DELETE FROM Table 
WHERE Column1 = 'a' AND Column2 = 'b' 
    OR column1 = 'b' AND Column2 = 'a' 

이 경우 한 열만 삭제됩니다. 어떤 도움 주셔서 감사합니다

+2

예제 데이터를 제공하지 않는 이유는 어떻게 알 수 있습니까? – Knickedi

+1

이 쿼리로 삭제해야하는 샘플 데이터를 표시하십시오. – zerkms

+3

또한 괄호를 추가하여 의미를 명확히하고 AND 및 OR이 생각대로 작동하지 않을 수 있습니다 (Column1 = 'a'및 Column2 = 'b'). 또는 (column1 = 'B'and Column2 = 'a') – Sparky

답변

3

SQL AND에서 OR 이상이 좋습니다.

WHERE (Column1 = 'a' AND Column2 = 'b') 
    OR (column1 = 'b' AND Column2 = 'a') 

:

귀하의 where 절은

WHERE (Column1 = 'a') 
    AND (Column2 = 'b' OR column1 = 'b') 
    AND (Column2 = 'a') 

이것은 당신이 원하지 않는 것을 매우 가능성이 높습니다 당신이 (거의) 항상 같이 괄호에있는 OR로 테스트를 놓아야로 해석됩니다 참조 : http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

+0

"SQL에서는 AND보다 우선합니다."- 맞지만 설명이 잘못되었습니다. 사실,'where' 절은'(Column1 = 'a'AND Column2 = 'b') 또는 (column1 = 'b'AND Column2 = 'a')'와 동일하므로 괄호없이 올바른 것입니다. –