显示外键引用值 Postgresql
Displaying Foreign Key Referenced value Postgresql
我有 3 个 table:
musiccollection: id (pk), title, artist..等等等等
musiccollection_playlist: mcpid (pk), playlistid (fk:playlist.playlistid), trackid(fk:musiccollection.id)
playlist: playlistid (pk), playlistname
我想显示 musiccollection 中的整行,如 musiccollection_playlist table 各自的外键所示。
例如。在音乐收藏中 table
id title artist
1 song1 artist1
2 song2 artist2
3 song3 artist3
4 song4 artist4
5 song5 artist5
例如。在播放列表中 table
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 table 中的实际行,其中选择的 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 table.
中引用
你有什么建议?
您的情况:
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';
我有 3 个 table: musiccollection: id (pk), title, artist..等等等等 musiccollection_playlist: mcpid (pk), playlistid (fk:playlist.playlistid), trackid(fk:musiccollection.id) playlist: playlistid (pk), playlistname
我想显示 musiccollection 中的整行,如 musiccollection_playlist table 各自的外键所示。
例如。在音乐收藏中 table
id title artist
1 song1 artist1
2 song2 artist2
3 song3 artist3
4 song4 artist4
5 song5 artist5
例如。在播放列表中 table
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 table 中的实际行,其中选择的 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 table.
中引用你有什么建议?
您的情况:
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';