0

我有以下查询:

SELECT TrackID, Name, Artist, Album, TotalTime, TrackNumber, TrackCount
FROM tracks
WHERE TrackID IN (SELECT Tracks FROM playlists
                  WHERE ID='f8ad830c-e2d6-11e1-99d7-00132094'
                  LIMIT 1)
ORDER BY Artist, Album, TrackNumber

执行该操作会返回“tracks”表中的第一行,以包含从子查询返回的任何结果。截至目前,子查询返回:

41646,41696,41698,41700,41702,41704,41706,41708,41710,41712

当我将从子查询返回的上述值放入原始查询中时,代替子查询,它会返回我期望的所有行。

为什么子查询将返回的结果限制为第一个结果,但是用返回的结果替换子查询(在 PHPMyAdmin 中运行时)会返回所有结果?

4

2 回答 2

2
SELECT TrackID, Name, Artist, Album, TotalTime, TrackNumber, TrackCount 
  FROM tracks 
 WHERE FIND_IN_SET(TrackID
                  , (SELECT Tracks
                       FROM playlists 
                      WHERE ID='f8ad830c-e2d6-11e1-99d7-00132094' 
                      LIMIT 1
                    )
                  ) > 0
 ORDER BY Artist, Album, TrackNumber 
;
于 2012-10-14T00:40:43.943 回答
1

limit 1在你的子查询中说。因此,您只获得 1 个 trackid,因此只有一首曲目。

您可以将曲目拆分为多行,因此对于一个播放列表,您的行数与曲目数一样多,或者您可以将曲目字符串拆分为临时表。查看MySQL:例如将逗号分隔的列表拆分为多行或搜索“将字符串拆分为行”

于 2012-10-13T22:08:30.540 回答