我无法弄清楚为什么我的代码不适用于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首曲目。
答案 0 :(得分:0)
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…