2012-07-15 2 views
0

좋아,이게 분명해야한다고 생각하지만, 나는 그것을 보지 못합니다. 세 번째 테이블 (예 : B)을 통해 두 테이블 (예 : A 및 C)이 관련 (많은 - 많은) 태그 시스템이 있습니다.관련성이 높은 행을 많은 관계에 한 번 가져옵니다.

C의 필드를 기반으로 조건을 충족하는 모든 고유 한 행을 선택하고 싶습니다. 즉, A의 동일한 행에 내 기준에 맞는 C의 여러 태그가있는 경우,

그래서 나는 C의 필드를 기반으로하는 기준을 충족시키는 태그를 가진 모든 행을 원합니다.하지만 A, 기준에 맞는 여러 개의 태그가 있더라도

+0

어떻게 태그가 배치됩니다


대안 솔루션은 쿼리가 EXISTS를 사용하여 다시 작성하는 것입니다? 그들은 다른 행 또는 하나의 열에 있습니까? 테이블 C의 기본 키가 필요하다고하지만, 다 대 다 관계라면 ***을 포함 할 ***을 어떻게 알 수 있습니까? –

+0

네, 제 의견을 삭제 했어요. 죄송 합니다만 너무 적은 수면에서 수술하고 있습니다. 제안 된 솔루션은 나를 위해 작동합니다. – scotru

답변

1
SELECT DISTINCT A.* 
FROM A 
    INNER JOIN B 
     ON A.id = B.id 
    INNER JOIN C 
     ON C.id = B.id 
WHERE C.SomeField = 'SomeValue' 
2

쉬운 해결책은 DISTINCT 키워드를 추가하는 것입니다. 즉이 변경이에

SELECT A.foo FROM ... 

을 :

SELECT DISTINCT A.foo FROM ... 

DISTINCT 키워드는 결과에서 중복을받지 않습니다 보장합니다.

SELECT * 
FROM A 
WHERE EXISTS 
(
    SELECT * 
    FROM B 
    JOIN C 
    ON ... 
    WHERE ... 
) 
관련 문제