2017-11-04 11 views
0

postgreSQL의 하위 쿼리에서 코드가 작동하지 않는 이유를 알 수 없습니다 (아래 문제).PostgreSQL 하위 쿼리 문제 : 다른 아티스트의 노래 제목과 일치하는 아티스트의 노래 제목을 지정하십시오.

문제 : 제목이 다른 아티스트의 노래 제목이기도 한 Leonard Cohen의 노래 제목을 제공합니다.

코드 :

select track.title 
from (select title, name, artistid 
     from artist inner join 
      track 
      USING(artistid) 
     where name = 'Leonard Cohen' 
    ) AS loli inner join 
    track on track.title = loli.title 

편집 : 그 힌트를 읽은 후 꽤 바보 같은 느낌은, 분명히 나는 ​​더 큰 목록에서 같은 노래와 함께 작은 목록에서 "일치"노래를 해요. 나는 그 (것)들을 안으로 매치하기 위하여 의미했다, 그들의 동일한 이름에 그 (것)들을 결합하지 말라.

내 생각 : 기본적으로 아티스트 (예술가와 이름 포함)와 트랙 (trackid, 아티스트, 제목 등 포함)의 결합 된 하위 쿼리를 작성하여 제공합니다. 별칭 'loli'. 31 곡이수록되어 있습니다. 하위 쿼리의 제목이 트랙의 제목과 일치해야하기 때문에 하위 테이블은 트랙 테이블의 내부 조인으로 간주됩니다. 그러나 일치하는 트랙을 표시하는 대신 33 개의 트랙을 표시합니다.

기본적으로 2 트랙 만 표시해야했지만 대신 31 트랙 및 2 배가 표시되었습니다. 레너드 코헨 다른 예술가들 1 및 2에 존재

  • songtitles의

  • +1

    힌트 : 트랙 자체가 일치합니다. –

    답변

    0
    1. 노래?

    1.

    select title, name, artistid 
    from artist 
    inner joint track USING(artistid) 
    where name = 'Leonard Cohen' 
    

    2.

    select title, name, artistid 
    from artist 
    inner joint track USING(artistid) 
    where name <> 'Leonard Cohen' 
    

    3.

    select title, name, artistid 
    from artist 
    inner joint track USING(artistid) 
    where name = 'Leonard Cohen' 
    and title IN (
         select title 
         from artist 
         inner joint track USING(artistid) 
         where name <> 'Leonard Cohen' 
         ) 
    

    inner join을 사용하거나 exists 사용하고 있지만 IN()는 듯 3 다른 방법이있다 오케이.

    Everybody knows, everybody knows 
    That's how it goes 
    Everybody knows…