PostgreSQL子查询问题:给艺术家的歌曲标题与其他艺术家的歌曲标题相匹配

时间:2017-11-04 01:55:04

标签: postgresql subquery

我无法弄清楚为什么我的代码不适用于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

编辑:在阅读该提示后感觉相当愚蠢,显然我在一个小列表中“匹配”歌曲与更大列表中的相同歌曲。我的意思是匹配他们,而不是加入他们的同名。我可能需要一个WHERE和EXISTS()

我的想法:基本上是艺术家(包含艺术家和名字)和曲目(包含trackid,artistid,title等等)的组合子查询,并给出别名'loli'。这包含31首歌曲。现在,子查询应该在轨道表上进行内部连接(因为子查询中的标题需要匹配轨道中的标题,对吗?),但是它不是向我显示匹配的轨道,而是向我显示33个轨道。

基本上它只需要显示2首曲目,而是返回31首曲目和2首曲目。

1 个答案:

答案 0 :(得分:0)

  1. Leonard Cohen的歌曲
  2. 其他艺术家的歌曲
  3. 哪一个存在于1和2?
  4. 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'
           )
    

    还有其他方法3,使用inner join或使用exists,但IN()对我来说似乎没问题。

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