2012-04-09 109 views
4

我有兩張桌子。這裏是一個簡化的故障:mysql - 如何從子查詢中獲取第一個結果?

Table #1 - Album: 
Rows: 
albumId | title | userId 

Table #2 - Photo: 
Rows: 
photoId | src | albumId 

我想從每個相冊中獲取第一張照片的src。這很明顯不是我正在尋找的,但這裏是我的:

SELECT pa.id, pa.title, p.src 
FROM Album pa 
LEFT JOIN Photo p ON pa.Id = p.albumId 
WHERE pa.userId = 1 

返回用戶的所有照片。我希望在這些結果中獲得每張專輯的第一個結果。

+0

如果你想檢索專輯的封面 - 你最好添加分隔的專欄,比如'cover_photo_id',並明確指定 – zerkms 2012-04-09 23:47:26

+2

在「每個專輯的第一個結果」中定義「first」 – 2012-04-09 23:48:13

+1

使用'ORDER'和'LIMIT 1' – 2012-04-09 23:53:08

回答

2

我想你可能要添加一個cover_photo_id,作爲@zerkms說,但是這可能做的伎倆(不知道是否使用子查詢是足夠有效的適合您的情況)

SELECT pa.albumId, pa.title, p.src 
FROM Album pa 
LEFT JOIN Photo p 
    ON p.photoId = (SELECT MIN(photoId) FROM Photo WHERE albumId = pa.albumId) 
WHERE pa.userId = 1 
+0

不會,這將只返回一行 – zerkms 2012-04-09 23:48:03

+0

我剛剛編輯它,請檢查一下 – g3rv4 2012-04-09 23:54:29

+2

你最好把這個條件放到'ON'部分 – zerkms 2012-04-09 23:54:47

0
SELECT pa.id, pa.title, p.src 
FROM Album pa 
    LEFT JOIN Photo p ON pa.Id = p.albumId 
WHERE pa.userId = 1 LIMIT 1; 
+1

你沒有得到問題 – zerkms 2012-04-09 23:49:35

-1

你想使用GROUP BY

SELECT pa.id, pa.title, p.src 
FROM Album pa 
LEFT JOIN Photo p ON pa.Id = p.albumId 
WHERE pa.userId = 1 
GROUP BY pa.id, pa.title 

如果你真的想第一相當於,看到this answer

+0

什麼'p.src'值應該被選中? – zerkms 2012-04-09 23:50:11

+0

編輯:剛添加了FIRST聚合函數 – pocketfullofcheese 2012-04-09 23:50:41

+1

哈哈,真好。但它不是4月1日:) – 2012-04-09 23:51:09

-2
SELECT pa.id, pa.title, p.src 
FROM Album pa 
LEFT JOIN Photo p ON pa.Id = p.albumId 
WHERE pa.userId = 1 
GROUP BY pa.albumId 
ORDER BY p.photoID 
+0

你不能得到不是聚合的字段或組密鑰...你能嗎? – g3rv4 2012-04-10 00:05:51

+2

@elgerva:其實你可以在MySQL中,但返回的數據(對於'p.src')是未定義的。它可以來自組中的任何(隨機)行。 – 2012-04-10 00:07:59

+0

是的,你可以在MySQL中。 MySQL不應該這樣做,我同意。我不知道它是否總是預期的行,我只是檢查了一些結果,並沒有問題。看起來像對我工作。 – 2012-04-10 00:15:29

相關問題