2012-04-09 15 views
4

私は2つのテーブルを持っています。ここに簡略化した内訳を示します。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

+2

「アルバムごとの最初の結果」に「first」を定義します。 –

+1

「ORDER」 'LIMIT 1' –

答えて

2

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

これは、ただ1行しか返しません。 – zerkms

+0

私はそれを編集しました。それをチェックしてください。 – g3rv4

+2

あなたはその条件を 'ON'の部分に入れたほうがいいです – zerkms

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

-1

(サブクエリを使用すると、自分の状況に十分に効率的であるかどうかを知りません)私は@zerkmsが言ったようにあなたは、cover_photo_idを追加したいかもしれないと思うが、これはトリックを行うことができますあなたが実際には最初の同等をしたいかどうかを確認、

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 

、GROUP BYを使用したいthis answer

+0

そして、 'p.src'の値が選択されるはずです。 – zerkms

+0

編集:ちょうど最初の集約関数を追加しました – pocketfullofcheese

+1

母、いいです。しかし、それは4月1日ではありません:) –

-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

+2

@elgerva:実際にはMySQLでできますが、返されるデータ( 'p.src'の場合)は未定義です。グループ内の任意の(ランダムな)行からのものである可能性があります。 –

+0

あなたはMySQLでできます。 MySQLは私が同意するべきではありません。私はそれがいつも予想される行かどうかわからない、私はちょうどいくつかの結果を確認し、それはいいです。私に働いているようです。 –

関連する問題