집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 동일한 열에서 여러 기준과 일치하는 레코드를 선택하는 방법은 무엇입니까?
SQL의 동일한 열에서 여러 조건과 일치하는 레코드 선택
SQL 쿼리에서 동일한 열의 여러 조건과 일치하는 레코드를 검색해야 하는 경우가 있습니다. 그러나 단순히 동일한 열에 여러 WHERE 절을 사용한다고 해서 항상 예상한 결과가 생성되는 것은 아닙니다. 다음 예를 고려해보세요.
연락처와 각 연락처의 상태를 나타내는 플래그가 포함된 데이터베이스 테이블이 있습니다. 테이블에는 다음 데이터가 포함되어 있습니다.
ID | contactid | flag | flag_type |
---|---|---|---|
118 | 99 | Volunteer | 1 |
119 | 99 | Uploaded | 2 |
120 | 100 | Via Import | 3 |
121 | 100 | Volunteer | 1 |
122 | 100 | Uploaded | 2 |
목표는 '자원봉사자' 및 '업로드됨' 플래그 조건과 모두 일치하는 연락처 ID만 반환하는 것입니다. 다음 쿼리를 사용하세요:
<code class="language-sql">SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'</code>
각 조건은 특정 플래그 값만 확인하므로 결과가 반환되지 않습니다. 필요한 데이터를 검색하려면 대체 방법을 사용해야 합니다.
GROUP BY 및 HAVING 사용
한 가지 해결책은 GROUP BY 및 HAVING 절을 사용하는 것입니다. 다음 쿼리는 결과를 contactid별로 그룹화하고 일치하는 플래그 값의 수를 계산합니다.
<code class="language-sql">SELECT contact_id FROM your_table WHERE flag IN ('Volunteer', 'Uploaded') GROUP BY contact_id HAVING COUNT(*) = 2 -- 必须与WHERE flag IN (...)列表中的数字匹配</code>
'자원봉사자' 및 '업로드됨' 플래그가 모두 표시된 연락처는 2로 계산됩니다. 그런 다음 HAVING 절은 이러한 연락처만 포함하도록 결과를 필터링합니다.
연결 사용
또 다른 방법은 연결을 사용하는 것입니다. 다음 쿼리는 your_table 테이블에서 자체 조인을 수행합니다.
<code class="language-sql">SELECT T1.contact_id FROM your_table T1 JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded' -- // 如果需要,可以添加更多连接 WHERE T1.flag = 'Volunteer'</code>
이 쿼리는 '자원봉사자' 및 '업로드됨' 플래그가 모두 있는 모든 연락처의 조합을 포함하는 임시 테이블을 생성합니다. 그런 다음 WHERE 절은 이 두 조건을 충족하는 연락처만 포함하도록 결과를 필터링합니다.
방법선택
동일한 열에 여러 조건이 있는 레코드를 선택하는 가장 좋은 방법은 데이터의 크기와 구조에 따라 다릅니다. 긴 일치 기준 목록이 있는 대규모 데이터 세트의 경우 GROUP BY 및 HAVING 솔루션이 더 효율적일 수 있습니다. 일치 기준 목록이 더 짧은 소규모 데이터 세트의 경우 JOIN 솔루션이 더 빠를 수 있습니다.
위 내용은 SQL의 동일한 열에서 여러 기준과 일치하는 레코드를 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!