MySql子查询IN返回第一个结果,而不是所有结果

时间:2012-10-13 21:58:42

标签: php mysql subquery

我有以下查询:

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中运行时)会返回所有结果?

2 个答案:

答案 0 :(得分: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 
;

答案 1 :(得分:1)

您在子查询中说limit 1。因此,您只能获得1个trackid,因此只能获得一个音轨。

您可以将曲目分成多行,因此对于一个播放列表,您可以拥有与曲目一样多的行,或者您可以将曲目字符串拆分为临时表。例如,查看MySQL: Split comma separated list into multiple rows或搜索“将字符串拆分为行”