집 >데이터 베이스 >MySQL 튜토리얼 >복잡한 SQL 쿼리에서 WHERE 절 필터링을 올바르게 적용하는 방법은 무엇입니까?
SQL문의 WHERE 매개변수 우선순위 문제
다음 SQL 쿼리는 "people" 테이블에서 데이터를 검색하고 결과를 "university=2"인 레코드로 제한하도록 설계되었습니다.
<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>
그러나 이 쿼리는 '대학=2' 조건을 넘어서는 예상치 못한 결과를 낳았습니다. 이 문제를 해결하려면 "university=2" 조건이 검색 결과를 엄격하게 제한하는지 확인해야 합니다.
괄호를 조정하여 작업 순서 제어
이 쿼리의 문제는 괄호를 잘못 사용하여 표현식 평가 순서에 영향을 미친다는 것입니다. 원래 쿼리에서는 "AND"가 "OR"보다 우선순위가 높습니다. 즉, 먼저 평가된다는 의미입니다. 결과적으로 "university=2"는 "MATCH (lname,fname) AGAINST ('massive' IN BOOLEAN MODE)"와만 결합되며 "fname/lname" 테스트와는 결합되지 않습니다.
이 문제를 해결하려면 "university=2"가 전체 검색 기준과 결합되도록 괄호를 조정해야 합니다.
<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>
이 조정을 통해 이제 "university=2" 조건이 괄호 안에 표시됩니다. 이는 해당 조건이 먼저 평가된 다음 두 번째 괄호 세트 내의 검색 조건과 결합되어야 함을 나타냅니다. 이렇게 하면 "university=2"가 true인 레코드만 검색에서 고려됩니다.
위 내용은 복잡한 SQL 쿼리에서 WHERE 절 필터링을 올바르게 적용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!