> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 FIND_IN_SET()과 IN() 비교: 각각은 언제 사용해야 합니까?

MySQL의 FIND_IN_SET()과 IN() 비교: 각각은 언제 사용해야 합니까?

Barbara Streisand
풀어 주다: 2024-12-18 04:12:15
원래의
583명이 탐색했습니다.

FIND_IN_SET() vs. IN() in MySQL: When Should I Use Each?

Find_in_set() 대 IN(): 차이점 이해

MySQL에서는 FIND_IN_SET() 및 IN() 연산자가 중요한 역할을 합니다. 테이블에서 데이터를 쿼리할 때. 둘 다 값 집합의 멤버십을 테스트하는 데 사용할 수 있지만 특정 시나리오를 처리하는 방법이 다릅니다.

주문과 관련된 회사 이름을 검색하는 것을 목표로 하는 다음 쿼리를 고려하세요.

SELECT name
FROM orders, company
WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)
로그인 후 복사

이 쿼리는 Company 1, Another Company 및 StackOverflow의 세 회사 이름을 모두 성공적으로 산출합니다. 그러나 FIND_IN_SET()을 IN()으로 바꾸면 예상치 못한 결과가 발생합니다.

SELECT name
FROM orders, company
WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
로그인 후 복사

이 경우 첫 번째 회사 이름인 Company 1만 반환됩니다. 그 이유를 이해하려면 이러한 연산자의 기본 메커니즘을 이해하는 것이 중요합니다.

FIND_IN_SET()

FIND_IN_SET()은 쉼표 내의 특정 값에 대한 문자 검색을 수행합니다. -구분된 문자열. 이 경우 attachmentCompanyIDs에는 '1,2,3'과 같은 문자열이 포함되어 있습니다. FIND_IN_SET()은 이 문자열 내에서 대상 값(1, 2 또는 3)의 위치를 ​​반환하거나, 찾을 수 없는 경우 0을 반환합니다.

IN()

IN ()는 반면에 대상 값과 비교할 값 목록을 기대합니다. 그러나 MySQL에서 attachmentCompanyIDs는 배열이나 목록이 아닌 스칼라 값입니다. 따라서 MySQL은 IN() 비교를 위해 이 스칼라 문자열을 정수(회사 ID 유형)로 캐스팅하려고 시도합니다.

캐스트하는 동안 MySQL은 문자열의 첫 번째 쉼표('1,2,3')를 해석합니다. )를 숫자 부분의 끝으로 사용하여 정수 값 1이 됩니다. 본질적으로 IN() 조건은 사실상 다음과 같습니다.

companyID IN (1)
로그인 후 복사

이것은 왜 첫 번째 회사만 이름인 Company 1이 검색됩니다. IN() 조건은 쉼표로 구분된 문자열의 첫 번째 값에 대해서만 true입니다.

해결책

쉼표 안의 값 개수가 다음과 같다고 가정하는 경우 -구분된 목록은 제한되어 있으므로 이러한 시나리오를 효과적으로 처리하기 위해 대체 접근 방식을 사용할 수 있습니다.

위 내용은 MySQL의 FIND_IN_SET()과 IN() 비교: 각각은 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿