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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL子查询问题:给艺术家的歌曲标题与其他艺术家的歌曲标题相匹配相关的知识,希望对你有一定的参考价值。

我无法弄清楚为什么我的代码不适用于postgreSQL中的子查询(下面的问题)。

问题:给出伦纳德科恩歌曲的标题,其标题也作为另一位艺术家的歌曲存在。

码:

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. 伦纳德科恩的歌
  2. 其他艺术家的歌名
  3. 哪一个存在于1和2?

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…

以上是关于PostgreSQL子查询问题:给艺术家的歌曲标题与其他艺术家的歌曲标题相匹配的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中检索特定艺术家的歌曲数量的最快方法是啥?

如何使用引用路径查询文档?

DBpedia SPARQL 查询 ID3 标签的歌曲信息

使用 AVAudioPlayer 当前播放歌曲的艺术作品

PHP / MYSQL:如何在while循环中循环来自查询的匹配结果

错误:用作表达式的子查询返回多行。 POSTGRESQL / 查看器