>데이터 베이스 >MySQL 튜토리얼 >내 SQL WHERE 절이 매개변수를 무시하는 이유는 무엇입니까?

내 SQL WHERE 절이 매개변수를 무시하는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-19 10:06:10362검색

Why Does My SQL WHERE Clause Ignore a Parameter?

SQL WHERE 절 문제 해결: 매개변수가 무시되는 이유

SQL 쿼리는 때때로 예기치 않은 결과를 생성할 수 있으며, 특히 WHERE 절에 여러 조건이 포함된 경우 더욱 그렇습니다. 이는 종종 잘못된 연산자 우선 순위 및 그룹화로 인해 발생합니다.

WHERE 절이 매개변수를 무시하는 것처럼 보이는 시나리오를 살펴보겠습니다.

<code class="language-sql">SELECT * FROM people
WHERE
  university='2'
  AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
  OR (fname LIKE '%box%' OR lname LIKE '%box%')</code>

이 쿼리는 people이 '2'인 university 테이블에서 레코드를 선택하고 '대량'에 대한 전체 텍스트 검색이 또는 첫 번째 또는 성에는 '상자'가 포함되어 있습니다. 그러나 결과 집합에는 university='2' 조건

을 충족하지 않는 항목이 포함될 수 있습니다.

문제는 SQL의 연산자 우선순위에 있습니다. ANDOR보다 우선합니다. 쿼리의 암시적 그룹화는 다음과 같습니다.

<code class="language-sql">(university='2') AND (
  (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE))
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
)</code>

university='2'이 전체 텍스트 검색에만 적용되는 방식에 유의하세요. 이를 수정하려면 AND 조건이 모든 부분에 적용되도록 명시적인 괄호가 필요합니다.

<code class="language-sql">SELECT * FROM people
WHERE
  (university='2')
  AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
       OR fname LIKE '%box%'
       OR lname LIKE '%box%')</code>

모든 조건을 괄호 안에 그룹화하여 지정된 모든 기준을 충족하는 레코드만 반환되도록 의도한 논리를 시행합니다. 이는 SQL에서 복잡한 WHERE 절을 구성할 때 신중한 괄호 사용의 중요성을 강조합니다.

위 내용은 내 SQL WHERE 절이 매개변수를 무시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.