2012-08-04 41 views
0

這可能是非常基本的,但我沒有經驗與子選擇。MySQL:疑難解答子選擇左連接

我有兩個表: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'。所有的建議讚賞。

回答

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 
+0

沒想到在集團所有的 - 這還允許沒有指定默認值。非常感謝! – Eamonn 2012-08-04 19:06:51

+0

:)我很高興我可以幫助 – 2012-08-04 19:08:31

1

在您的查詢中,由於未在子查詢中選擇p.AlbumID,因此無法找到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) 
+0

+1來解釋我的代碼失敗。看不到它:) – Eamonn 2012-08-04 19:07:27