我在名为galley_images
的表格中有这些值:
id gallery_id image_id
1 1 1
2 1 2
3 1 3
4 2 4
5 2 5
6 2 6
7 2 7
8 3 8
我想这样返回结果:
id gallery_id image_id
1 1 1
4 2 4
8 3 8
基本上我只想要具有唯一gallery_id
的任何记录的第一个实例。
我有一个使用Access DB的解决方案,但需要一个MySQL解决方案,Access解决方案是:
SELECT id, First(gallery_id) AS FirstOfgallery_id,
First(image_id) AS FirstOfimage_id
FROM galley_images
GROUP BY id
任何帮助?
答案 0 :(得分:2)
子查询背后的想法是为每个ID
选择最小 gallery_ID
。然后将它与自身连接以获取表格的所有列(,如果有的话)。
SELECT a.*
FROM gallery_images a
INNER JOIN
(
SELECT gallery_ID, MIN(image_ID) minID
FROM gallery_images
GROUP BY gallery_ID
) b
ON a.gallery_ID = b.gallery_ID AND
a.image_ID = b.minID
答案 1 :(得分:1)
试试这个:
SELECT *
FROM galley_images t
JOIN
( SELECT gallery_id,
MIN(image_id) as image_id
FROM galley_images
GROUP BY gallery_id )a
ON t.gallery_id =a.gallery_id
AND t.image_id=a.image_id
答案 2 :(得分:1)
SELECT id, gallery_id, image_id FROM galley_images WHERE id IN (
SELECT MIN(ID)
FROM gallery_images
GROUP BY gallery_ID
)
答案 3 :(得分:1)
John Woo的解决方案的一些补充:
SELECT a.*
FROM gallery_images a
INNER JOIN
(
SELECT gallery_ID, MIN(id) id
FROM gallery_images
GROUP BY gallery_ID
) b
ON a.gallery_ID = b.gallery_ID AND
a.id = b.id
我们必须得到最小记录ID而不是min(image_id)因为image_id可能会以不同的顺序出现。