2017-11-04 14 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 

EDIT:私は大きなリストに同じ曲の小さなリストに「マッチング」の歌よ、明らかに、そのヒントを読んだ後、かなり間抜けに感じます。私はそれらをマッチさせることを意味し、同じ名前でそれらを結びつけませんでした。

私の考え:基本的にアーティスト(アーティストIDと名前を含む)とトラック(トラックID、アーティストID、タイトルなどを含む)のサブクエリを組み合わせて与えました。エイリアス 'loli'。これは31曲含まれています。サブクエリはトラックテーブルの内部結合になっているはずです(サブクエリ内のタイトルはトラック内のタイトルと一致する必要があるためです)。一致するトラックを表示する代わりに、33トラックを表示します。

基本的に私には2トラックのみを表示しなければならず、代わりに31トラックと2倍を返しました。レナード・コーエンの

+1

ヒント:トラック自体が一致します。 –

答えて

0
  1. 歌ものは1と2に存在する他のアーティスト
  2. songtitles?

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… 
関連する問題