>데이터 베이스 >MySQL 튜토리얼 >MySQL 쿼리 내에서 쉼표로 구분된 문자열의 특정 값을 효율적으로 찾는 방법은 무엇입니까?

MySQL 쿼리 내에서 쉼표로 구분된 문자열의 특정 값을 효율적으로 찾는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-22 21:27:11864검색

How to Efficiently Find Specific Values in Comma-Separated Strings within MySQL Queries?

MySQL 쿼리 및 쉼표로 구분된 문자열 값: 집중적 접근 방식

MySQL 데이터베이스 내에서 쉼표로 구분된 문자열로 저장된 데이터를 관리하면 특정 값을 검색할 때 문제가 발생하는 경우가 많습니다. "1,2,5,12,15"와 같이 쉼표로 구분된 숫자가 포함된 COLORS 테이블의 SHIRTS 필드를 상상해 보세요. 여기서 각 숫자는 색상을 나타냅니다.

간단한 LIKE 쿼리의 문제점

SELECT * FROM SHIRTS WHERE COLORS LIKE '%1%'와 같은 쿼리는 색상 1(빨간색)의 셔츠를 찾는 것을 목표로 하지만 부분적인 문자열 일치로 인해 12(회색) 및 15(주황색)와 같은 색상의 셔츠도 잘못 반환됩니다.

정확한 값 검색 기법

색상 1의 셔츠만 분리하려면 더 정확한 방법이 필요합니다.

방법 1: 정확한 일치를 위해 CONCAT 활용

CONCAT 기능을 사용하여 전략적으로 쉼표를 추가하면 정확한 일치를 보장할 수 있습니다.

<code class="language-sql">SELECT * FROM SHIRTS WHERE CONCAT(',', COLORS, ',') LIKE '%,1,%'</code>

이렇게 하면 COLORS 문자열의 시작과 끝에 쉼표가 추가되어 ",1,"을 정확하게 검색할 수 있습니다.

방법 2: find_in_set 함수 활용

또는 find_in_set 기능이 보다 직접적인 솔루션을 제공합니다.

<code class="language-sql">SELECT * FROM SHIRTS WHERE FIND_IN_SET('1', COLORS) > 0</code>

FIND_IN_SET은 쉼표로 구분된 문자열(COLORS) 내에 검색 문자열(이 경우 '1')이 있는 경우 0보다 큰 값을 반환합니다.

이러한 방법은 부정확한 LIKE 문의 함정을 피하면서 MySQL 쿼리 내의 쉼표로 구분된 문자열에서 특정 값을 정확하게 추출하는 효율적인 방법을 제공합니다. 이러한 솔루션이 작동하는 동안 쉼표로 구분된 값을 피하기 위해 데이터베이스를 정규화하는 것이 일반적으로 데이터 무결성 및 쿼리 성능을 위한 가장 장기적인 솔루션이라는 점을 기억하세요.

위 내용은 MySQL 쿼리 내에서 쉼표로 구분된 문자열의 특정 값을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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