2012-04-09 111 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

相关问题