> 데이터 베이스 > MySQL 튜토리얼 > SQL 조인을 사용하여 주어진 값 집합을 모두 포함하지만 잠재적으로 더 많은 값을 포함하는 레코드를 검색하는 방법은 무엇입니까?

SQL 조인을 사용하여 주어진 값 집합을 모두 포함하지만 잠재적으로 더 많은 값을 포함하는 레코드를 검색하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-17 14:35:12
원래의
845명이 탐색했습니다.

How to Retrieve Records Containing All of a Given Set of Values (But Potentially More) Using SQL Joins?

조인된 집합에 모든 값이 포함되어야 하지만 더 많은 값이 포함될 수 있는 SQL

관계가 있는 테이블 집합이 주어지면 목표는 레코드를 검색하는 것입니다. 주어진 값 배열을 포함하지만 추가 값도 가질 수 있는 하나의 테이블(오퍼)에서.

SQL에서는 다음을 사용하여 이를 달성할 수 있습니다. 조인, 그룹화 및 HAVING 절의 조합입니다. 다음 쿼리는 이 작업을 수행합니다.

SELECT o.*
FROM   sports        s
JOIN   offers_sports os ON os.sport_id = s.id
JOIN   offers        o  ON os.offer_id = o.id
WHERE  s.name IN ('Bodyboarding', 'Surfing') 
GROUP  BY o.id  -- !!
HAVING count(*) = 2;
로그인 후 복사

고려 사항:

  • 오퍼 테이블의 기본 키(o.id)는 다음으로 그룹화하는 데 사용됩니다. 각 제안이 한 번만 계산되는지 확인하세요.
  • GROUP BY는 DISTINCT를 사용하지 않고 레코드를 집계하는 데 사용할 수 있습니다. 카운트 작업.
  • HAVING 절은 원하는 기준(이 경우 두 가지 특정 스포츠 포함)을 충족하는 제안만 포함하도록 그룹화된 결과를 필터링합니다.

ActiveRecord 구현:

def self.includes_sports(*sport_names)
  joins(:sports)
    .where(sports: { name: sport_names })
    .group('offers.id')
    .having("count(*) = ?", sport_names.size)
end
로그인 후 복사

이 방법을 사용하면 지정된 스포츠 이름이 포함된 제안을 쿼리할 수 있습니다. 활성 기록:

offers = Offer.includes_sports("Bodyboarding", "Surfing")
로그인 후 복사

위 내용은 SQL 조인을 사용하여 주어진 값 집합을 모두 포함하지만 잠재적으로 더 많은 값을 포함하는 레코드를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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