SQL의 여러 행에 대한 "AND" 교차 해결
여러 조건에 따라 데이터를 검색하기 위해 데이터베이스를 쿼리하는 것은 일반적인 작업입니다. 그러나 조건을 여러 행에 적용해야 하는 경우 접근 방식이 복잡해질 수 있습니다. 이 문서에서는 하위 쿼리가 필요 없는 이러한 시나리오에 대한 보다 효율적인 솔루션을 제시합니다.
"tagid" 및 "contentid" 열이 있는 "tags" 테이블을 생각해 보세요. tagid 334, 338, 342로 태그가 지정된 모든 콘텐츠의 "contentid"를 찾으려면 기존 접근 방식에 중첩된 하위 쿼리가 필요합니다. 그러나 이 방법은 조건 수가 증가함에 따라 효율성이 떨어집니다.
최적화된 접근 방식은 하위 쿼리를 피하므로 쿼리 성능이 더 빠르고 확장 가능해집니다. 수정된 쿼리는 다음과 같습니다.
SELECT contentID FROM tags WHERE tagID in (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
이 쿼리는 tagid 목록과 함께 "IN" 연산자를 활용하여 교차점을 달성합니다. "GROUP BY" 절은 결과를 "contentID"별로 그룹화하고 "HAVING" 절은 지정된 태그 ID가 모두 포함된 콘텐츠만 포함하도록 결과를 필터링합니다.
일반적으로 이 패턴을 확장하여 다음을 찾을 수 있습니다. 여러 태그의 교차점:
SELECT contentID FROM tags WHERE tagID in (...) --taglist GROUP BY contentID HAVING COUNT(DISTINCT tagID) = ... --tagcount
"taglist" 및 "tagcount" 자리 표시자를 원하는 값으로 바꾸면 이 쿼리는 콘텐츠를 효율적으로 찾을 수 있습니다. 교차 기준을 충족합니다.
위 내용은 SQL에서 여러 행 조건의 교차점을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!