显示外键引用值Postgresql

时间:2015-04-10 17:54:05

标签: postgresql reference foreign-keys

我有3张桌子: musiccollection :id(pk),title,artist .. etc等 musiccollection_playlist :mcpid(pk),playlistid(fk:playlist.playlistid),trackid(fk:musiccollection.id) 播放列表:playlistid(pk),播放列表名称

我想在musiccollection中显示整个行,如musiccollection_playlist表中各个外键所示。

离。在musiccollection表中

id    title    artist 
1     song1    artist1
2     song2    artist2
3     song3    artist3
4     song4    artist4
5     song5    artist5

离。在播放列表表中

playlistid    playlistname
1             playlist1
2             playlist2

离。在musiccollection_playlist中

mcpid    playlistid    trackid
1        1             2
2        1             4
3        1             5

现在我想在musiccollection_playlist中显示数据WHERE playlistid是1(一般示例)。但是我希望返回的数据是music_collection表中的实际行,其中id被选择为2,4,5。

我正在尝试编写查询:

SELECT * FROM musiccollection as a, musiccollection_playlist as b WHERE a.id IN (SELECT trackid FROM musiccollection_playlist) AND b.playlistid = '1'

我必须错误地推理某些内容,或者我在查询中出错了。 我怎样才能解决这个问题以实现我的目标?即显示由musiccollection_playlist中的trackid标识的整行。

实际上我可以做类似的事情:

SELECT trackid FROM musiccollection_playlist WHERE playlistid = '1'

然后,trackid必须从musiccollection表中引用。

你有什么建议?

1 个答案:

答案 0 :(得分:1)

你的情况:

WHERE a.id IN (SELECT trackid FROM musiccollection_playlist)

只会将结果限制在任何播放列表中的每个曲目。

我认为您需要查看joins上的文档。他们可以让生活更简单:

SELECT a.* FROM musiccollection a INNER JOIN musiccollection_playlist b ON
  a.id = b.trackid
WHERE b.playlistid = '1';