3

私はこれらの値をというテーブルに持っています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

4 に答える 4

2

サブクエリの背後にある考え方は、それぞれの最小値 を選択することです。次に、それをそれ自体に対して結合して、テーブルのすべての列を取得します(存在する場合)。IDgallery_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
于 2012-10-31T05:50:51.057 に答える
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フィドルデモ

于 2012-10-31T05:50:19.973 に答える
1
SELECT id, gallery_id, image_id FROM galley_images WHERE id IN (
        SELECT MIN(ID) 
        FROM gallery_images 
        GROUP BY gallery_ID
    )
于 2012-10-31T05:51:27.983 に答える
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

min(image_id)ではなく、最小のレコードIDで取得する必要があります。これは、image_idが異なる順序で表示される可能性があるためです。

于 2012-10-31T06:33:18.557 に答える