显示列中具有重复值的记录的第一个实例

时间:2012-10-31 05:48:06

标签: mysql sql

我在名为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

任何帮助?

4 个答案:

答案 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


SQL Fiddle Demo

答案 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可能会以不同的顺序出现。