> 데이터 베이스 > MySQL 튜토리얼 > JOIN을 사용하여 SQL에서 'tag1'과 'tag2'가 모두 있는 사용자를 선택하는 방법은 무엇입니까?

JOIN을 사용하여 SQL에서 'tag1'과 'tag2'가 모두 있는 사용자를 선택하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-28 02:08:09
원래의
797명이 탐색했습니다.

How to Select Users with Both 'tag1' and 'tag2' in SQL Using JOINs?

SQL JOIN의 여러 행에 대한 조건

문제: 일치하는 레코드를 검색하기 위해 JOIN의 여러 행에 조건을 적용합니다.

목표: 두 가지를 모두 갖춘 사용자 선택 'tag1' 및 'tag2' 태그.

애플리케이션

이 문제를 해결하는 데는 두 가지 주요 접근 방식이 있습니다.

1. 개별 행 테스트

A. 있음:

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') 
로그인 후 복사

C. 조인:

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. 행 집계

A. 개수:

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
로그인 후 복사

B. 문자열 처리:

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 
로그인 후 복사

고려 사항

  • 개별 행 테스트: 소규모 데이터 세트에 적합하지만 데이터 양이 많은 경우 성능이 저하될 수 있습니다.
  • 행 집계: 확장성 향상 성능 측면에서는 좋지만 집계 내에 중복이 존재할 수 있는 경우 제한이 있습니다.
  • 데이터베이스 호환성: 문자열 처리 기술에는 데이터베이스별 확장이 필요할 수 있습니다.

위 내용은 JOIN을 사용하여 SQL에서 'tag1'과 'tag2'가 모두 있는 사용자를 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿