>데이터 베이스 >MySQL 튜토리얼 >SQL 조인을 사용하여 여러 태그가 있는 사용자를 효율적으로 찾는 방법은 무엇입니까?

SQL 조인을 사용하여 여러 태그가 있는 사용자를 효율적으로 찾는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-23 17:30:14901검색

How to Efficiently Find Users with Multiple Tags Using SQL Joins?

조인의 여러 행에 조건을 적용하는 SQL

문제:

'tag1'을 모두 소유한 사용자 확인 및 'tag2' 태그를 사용하는 동시에 사용자에게 다음 중 하나를 반환하는 'IN' 사용 효과를 피합니다. tag.

해결책:

테이블 B의 두 행 조건을 기반으로 테이블 A에서 행을 선택하려면 다음 전략 중 하나를 선택하세요.

1. 다른 행 테스트:

  • EXISTS 절: 테이블 B에서 조건과 일치하는 행이 있는지 확인합니다.
SELECT * FROM users WHERE 
  EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag1') AND
  EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag2')
  • 하위 쿼리: 테이블의 행을 기준으로 일치 B.
SELECT * FROM users WHERE 
  id IN (SELECT user_id FROM tags WHERE name ='tag1') AND
  id IN (SELECT user_id FROM tags WHERE name ='tag2') 
  • JOIN: 테이블 B와 여러 번 조인하여 행을 집계합니다.
SELECT u.* FROM users u 
     INNER JOIN tags t1 ON u.id = t1.user_id
     INNER JOIN tags t2 ON u.id = t2.user_id
  WHERE t1.name = 'tag1' AND t2.name = 'tag2'

2. 행 집계:

  • COUNT: 테이블 B가 중복 태그로부터 보호하는 경우 적합합니다.
SELECT users.id, users.user_name 
   FROM users INNER JOIN tags ON users.id = tags.user_id
   WHERE tags.name IN ('tag1', 'tag2')
   GROUP BY users.id, users.user_name
   HAVING COUNT(*) = 2
  • 문자열 처리(표준 SQL 아님): 태그를 문자열로 연결하고 다음을 확인합니다. 특정 태그의 존재.
SELECT user.id, users.user_name, GROUP_CONCAT(tags.name) as all_tags
  FROM users INNER JOIN tags ON users.id = tags.user_id
  GROUP BY users.id, users.user_name
  HAVING FIND_IN_SET('tag1', all_tags) > 0 AND
         FIND_IN_SET('tag2', all_tags) > 0 

권장 사항:

최적의 확장성을 위해 여러 태그가 나타날 수 있는 경우 보호된 태그 또는 내부 집계와 함께 COUNT를 사용하는 것이 좋습니다. 사용자를 위한 것입니다.

위 내용은 SQL 조인을 사용하여 여러 태그가 있는 사용자를 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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