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?
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子查询问题:给艺术家的歌曲标题与其他艺术家的歌曲标题相匹配的主要内容,如果未能解决你的问题,请参考以下文章