SQL을 사용하여 조인의 여러 행에 조건 적용
조인 작업 시 여러 행에 특정 기준을 적용해야 하는 경우가 많습니다. 조인된 테이블에서. 이는 개별 행 테스트 또는 행 집계와 관련된 다양한 기술을 사용하여 달성할 수 있습니다.
EXISTS, 하위 쿼리 및 조인을 사용하여 개별 행 테스트
1A. 있음:
이 방법을 사용하면 특정 조건을 만족하는 행의 존재를 확인할 수 있습니다.
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');
1B. 하위 쿼리:
하위 쿼리를 사용하여 조인된 테이블의 조건에 따라 행을 선택할 수도 있습니다.
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');
1C. JOIN:
INNER 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';
COUNT를 이용한 행 집계 및 문자열 처리
2A. 개수:
이 기술은 개수별로 행을 집계하는 데 의존합니다. 동일한 사용자에게 태그를 여러 번 적용할 수 없을 때 효과적입니다.
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;
2B. 문자열 처리:
GROUP_CONCAT 및 FIND_IN_SET과 같은 문자열 처리 확장을 제공하는 데이터베이스의 경우 문자열 처리를 사용하여 여러 태그를 확인할 수 있습니다. 하지만 이 방법은 비효율적일 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!