집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 데이터베이스에서 쉼표로 구분된 값을 사용하여 테이블을 효율적으로 조인하려면 어떻게 해야 합니까?
한 열에서 쉼표로 구분된 값으로 테이블 조인
데이터베이스를 다룰 때 쉼표가 포함된 열을 기준으로 테이블을 조인해야 하는 경우가 많습니다. -구분된 값. 이 특정한 경우에는 테이블 C의 쉼표로 구분된 열("userids")이 특정 검색어와 일치하는 사용자 이름을 검색하려고 합니다.
하위 문자열 추출을 사용한 SQL 쿼리
초기 쿼리에서 하위 쿼리를 사용하여 테이블 C의 "userids" 열에 있는 쉼표로 구분된 문자열에서 첫 번째 값을 추출하려고 했습니다. 그러나 이 접근 방식은 원하는 값이 항상 문자열의 첫 번째라고 가정하기 때문에 비효율적이고 신뢰할 수 없습니다.
find_in_set을 사용한 향상된 쿼리
더 나은 솔루션은 다음을 사용하는 것입니다. MySQL의 find_in_set 함수를 사용하면 쉼표로 구분된 문자열 내에서 특정 값을 검색할 수 있습니다. string:
SELECT * FROM tblC c JOIN tblB b ON (find_in_set(b.userid, c.userids) > 0) WHERE c.nname = "new1"
이 쿼리는 "nname" 열이 "new1"과 일치하는 테이블 C의 행과 연결된 모든 사용자 이름을 효율적으로 검색합니다.
정규화된 스키마 대안
그러나 쉼표로 구분된 값을 열에 저장하는 것은 권장되는 방법입니다. 더 나은 데이터 무결성과 성능을 위해서는 접합 테이블을 도입하여 스키마를 정규화하는 것이 좋습니다.
제공된 예에서는 c_id(테이블에 대한 외래 키)라는 두 개의 열이 있는 새 접합 테이블(tblC_user)을 생성할 수 있습니다. C) 및 사용자 ID(테이블 B의 외래 키). 이를 통해 쉼표로 구분된 문자열 없이 테이블 C와 B 사이의 다대다 관계를 표현할 수 있습니다.
정규화된 쿼리
정규화된 쿼리 사용 스키마를 사용하려면 다음 쿼리를 사용하여 원하는 결과를 검색할 수 있습니다.
SELECT * FROM tblC c JOIN tblC_user cu ON (c.id = cu.c_id) JOIN tblB b ON (b.userid = cu.userid) WHERE c.nname = "new1"
이 쿼리는 쉼표로 구분된 값을 기반으로 테이블을 조인하는 보다 효율적이고 안정적인 방법입니다.
위 내용은 MySQL 데이터베이스에서 쉼표로 구분된 값을 사용하여 테이블을 효율적으로 조인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!