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

SQL 조인을 사용하여 여러 태그가 있는 사용자를 선택하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-20 05:41:14219검색

How to Select Users with Multiple Tags Using SQL Joins?

조인의 여러 행에 SQL 조건을 구현하는 방법

제시된 문제는 조인에서 두 개의 특정 태그를 소유한 사용자를 선택하는 것과 관련이 있습니다. 작업. IN을 사용하여 제공된 예는 두 태그 중 하나를 가진 사용자를 반환하지만 원하는 결과는 두 태그를 모두 소유한 사용자를 검색하는 것입니다. 이를 위해 ALL 키워드를 활용하는 것은 부적절합니다.

해결책

1. 다양한 행 테스트

  • EXISTS 하위 쿼리: 여러 행에서 조건과 일치하는 행이 있는지 확인합니다.
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')
  • 하위 쿼리: 여러 조건에 일치하는 사용자를 선택합니다. 행.
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: 각 태그 조건에 대해 여러 조인을 만듭니다.
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(데이터 보호 필요): 집계 행 수를 계산하여 두 태그가 모두 있는지 확인합니다.
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
  • 문자열 처리(데이터베이스별): 연결 태그 이름을 지정하고 데이터베이스별 기능을 사용하여 특정 태그가 있는지 확인하세요.
(MySQL Specific)
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 

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

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