2014-04-18 3 views
1

작성하기가 어려운 제목 이었지만,별로 설명하지 않았 음을 두려워합니다! 기본적으로mySQL을 사용하여 같은 정보를 선택하십시오.

나는 테이블을 가지고, 이러한 열 구성의 그것이

링크 링크 부르 자 (내가보기에 구분 테스트 데이터를 추가 할 것) : 이제 내가하고 싶은 것을

linksid | folderid | link 
    1   1  www.example.com 
    2   1  www.anotherexample.com 

    3   2  www.example.com 
    4   2  www.anotherexample.com 
    5   2  www.auniquewebsite.com 

을 때 folderid 2에서 고유 한 웹 사이트를 얻는 것입니다, 또한 folderid에 존재하는 2 개의 링크가있는 그 폴더 때문에 - 나는 사용자를위한 제안을 만들고 싶습니다.

지금까지 내가 가진 :

SELECT b.folderid, b.link FROM Links b 

    LEFT OUTER JOIN Links a 

    ON a.link = b.link AND a.folderid <> b.folderid 

    WHERE (a.folderid = 1) 

그러나이 쿼리는 이러한 결과를 제공, 등이 일치 아무것도 할 수없는 선택이 없다로 : 나는 어떤 노력했습니다

linksid | folderid | link 
    1   1  www.example.com 
    2   1  www.anotherexample.com 

    3   2  www.example.com 
    4   2  www.anotherexample.com 

을 다른 셀렉터 (like 및 a.link IS null)는 모두 결과를 가져 오지 않습니다. 이상 적으로는 고유 한 링크를 얻고 싶을 때만 같은 폴더에있는 적어도 2 개의 링크가 검색된 폴더와 일치 할 때만

내가 잘못된 각도에서 접근하고있는 것처럼 느껴진다. 내게 올바른 방향으로? 만약 내가 제대로 이해하고

+0

당신은 현재 얻고있는 것을 말했지만 실제로 원하는 것은 아닙니다. 출력물을 원하는대로 추가 할 수 있습니까? –

+0

오, 내 실수. I 출력이 원하는 것이 예에서는 folderid = 2, linkID를 = 5, 링크 = www.auniquewebsite.com folderid 2 2 개 일치하는 링크를 가지고 있기 때문에 내가 쿼리는이 출력을 선택 싶어 folderid 1을 사용하면 folderid 1이 folderid 2에서 링크를 얻는 데 가장 흥미를 느낄 것입니다. – user3548528

답변

0

, 당신은 = 여기 1. 하나의 접근 방식은 left outer join을 사용하는 폴더에 존재하지 않는 폴더에 대한 행 = 2를 원하는 :

select l2.* 
from Links l2 left outer join 
    Links l1 
    on l2.link = l1.link and 
     l1.folder = 1 
where l2.folder = 2 and l1.link is null; 

편집 :

당신이 원하는 경우 폴더 1에 대한 모든 링크와 일치하는 폴더에 대한 모든 "일치하지 않는"링크는 쿼리가 더 복잡합니다. 다음은 L1에 대한 모든 링크가 포함 된 폴더를 가져온 다음 아마도 좀 더 :

select l2.folder 
from links l1 left outer join 
    links l2 
    on l1.link = l2.link 
where l1.folder = 1 
group by l2.folder 
having sum(l2.link is null) = 0; 

는, 폴더 1에없는 이러한 모든 링크를 얻을 하위 쿼리 및 더 많은 로직을 사용하려면 :

select l.* 
from (select l2.folder 
     from links l1 left outer join 
      links l2 
      on l1.link = l2.link 
     where l1.folder = 1 
     group by l2.folder 
     having sum(l2.link is null) = 0 
    ) l2 join 
    links l 
    on l2.folder = l.folder 
where not exists (select 1 
        from links l1 
        where l1.folder = 1 and 
         l1.link = l.link 
       ); 
+0

예. 원하는 내용이지만 folderid = 2가 일치하는 행이있는 폴더인지는 모릅니다. 먼저 folderid 1과 2 개의 일치하는 링크가있는 folderid를 찾아야합니다. – user3548528

+0

그 편집은 내 문제를 완벽하게 해결합니다. 감사합니다. 질문을 연구하여 지금 이유를 파악하려고합니다. : p 다시 감사합니다. – user3548528

+0

@ user3548528. . . 그것은 흥미로운 문제이며 오히려 독특합니다. 더 간단한 방법이 있는지 궁금해하지만, 위의 작업이 기쁩니다. –

관련 문제