MySQL:解决左连接中的子选择问题

时间:2012-08-04 18:53:56

标签: mysql subquery left-join

这可能是非常基本的,但我对子选择没有任何经验。

我有两个表:prm_albumgallery_metaprm_album存储每个相册的名称和ID,gallery_meta存储每张相册中每张图片的图片详细信息。因此涉及的列是:

prm_album:        ID, Name
gallery_meta:     FileName, AlbumID, FileExt, IsDefault, Created

我试图合并两个查询 - 一个给了我一张专辑列表,另一个给了我这些专辑的缩略图信息。我想最终得到一个阵列,我可以获得每个专辑的名称,ID,以及它的默认(或第一)图像信息。

SELECT a.ID, a.Abbr, a.Name, p.FileName, p.FileExt 
FROM prm_album a
LEFT JOIN ( 
    SELECT FileName, FileExt
    FROM gallery_meta 
    ORDER BY (IsDefault = 1) DESC, Created ASC
    LIMIT 0,1 ) AS p
ON (a.ID = p.AlbumID)
WHERE 1

当通过控制台时,会抛出错误Unknown column 'p.AlbumID' in 'on clause'。所有建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

在您的查询中,它找不到p.AlbumID,因为您没有在子查询中选择它。但是,如果每张专辑只有一个IsDefault

SELECT a.ID, a.Abbr, a.Name, p.FileName, p.FileExt 
FROM prm_album a
LEFT JOIN
gallery_meta p ON (a.ID = p.AlbumID AND p.IsDefault = 1)

答案 1 :(得分:0)

SELECT a.ID, a.Abbr, a.Name, p.FileName, p.FileExt 
FROM prm_album a
LEFT JOIN gallery_meta p
  ON p.AlbumID=a.ID
GROUP BY a.ID
ORDER BY p.IsDefault DESC, p.Created ASC