2012-03-16 4 views
4

기본적으로 테이블 serviceslanguages을 조인하는 조인 테이블 languages_services이 있습니다.적어도 두 개 또는 여러 값이 일치하는지 확인하기 위해 조인 테이블에서 조건부 AND를 사용하는 SQL

영어 (language_id=1)과 ESPANOL (language_id=2)을 모두 지원할 수있는 서비스를 찾아야합니다. 그렇지 않기 때문에 위의 제공하는 데이터와

table languages_services 
------------------------ 
service_id | language_id 
------------------------ 
1   | 1 
1   | 2 
1   | 3 
2   | 1 
2   | 3 

, 나는 분명히이 SERVICE_ID = 2로 하나를 반환하지 않는 결과가이

QUERY RESULT 
------------ 
service_id 
------------ 
1 

과 같을 것이다 곳 language_id=1 AND language_id=2을 테스트 할 service Espanol.

여기에 대한 모든 정보를 제공해 주시면 대단히 감사하겠습니다.

답변

5
SELECT 
    service_id 
FROM 
    language_services 
WHERE 
    language_id = 1 
    OR language_id = 2 
GROUP BY 
    service_id 
HAVING 
    COUNT(*) = 2 

또는 ...

WHERE 
    lanaguage_id IN (1,2) 
GROUP BY 
    service_id 
HAVING 
    COUNT(*) = 2 

는 항상 2 개 언어에서 찾고 있다면 당신이 그것을 할 수 조인 만 집계 버전은 language_ids의 번호를 다른에 적응하기가 쉽습니다. OR을 추가하거나 IN 목록에 항목을 추가하고 COUNT(*) = 2COUNT(*) = 3 등으로 변경합니다.

그러나이 조정 비율은 매우 낮습니다. 그리고이 테이블 구조로는 그것에 대해 할 수있는 일이별로 없습니다.


편집 예 A 2 개 언어

SELECT 
    lang1.service_id 
FROM 
    language_services AS lang1 
INNER JOIN 
    language_services AS lang2 
    ON lang1.service_id = lang2.service_id 
WHERE 
     lang1.language_id = 1 
    AND lang2.language_id = 2 
+0

최고에 대한 조인을 사용, 그 일을! 감사. 가능하다면 두 언어에 대한 조인 테이블에서 어떻게 작동 하는지를 보여줄 수 있습니까? 고마워, 고마워. – chadwtaylor

+0

@chadwtaylor - 정확히 2 개 언어로 된'JOIN' 버전이 추가되었습니다. – MatBailie

+0

당신은 굉장합니다. 빠른 응답을 위해! 처음 두 예제가 여러 언어를 모으는 것과 결합하는 것이 더 낫다고 말한 이유를 알 수 있습니다. – chadwtaylor