我有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表中引用。
你有什么建议?
答案 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';