表 table(id, name),需查詢 name 不重複的所有資料並保留 id。
SELECT DISTINCT name FROM table; -- 僅回傳 name,無 id
SELECT DISTINCT name, id FROM table; -- 對 (name,id) 組合去重,無效
SELECT id, DISTINCT name FROM table; -- 語法錯誤
GROUP_CONCAT(DISTINCT name) + GROUP BY name → 需 MySQL 4.1+COUNT(DISTINCT name) + GROUP BY name → 可行但多產生計數欄SELECT id, name FROM table GROUP BY nameMySQL 允許 GROUP BY 欄位未出現在選取清單中的非彙總欄位 (非標準 SQL 行為),會自動選取該群組的第一筆記錄值。此特性恰好滿足「每個 name 取一筆 id」的需求。
-- 測試資料
id | name
1 | a
2 | b
3 | c
4 | c
5 | b
-- 解法
SELECT id, name FROM table GROUP BY name;
-- 結果
id | name
1 | a
2 | b
3 | c
GROUP BY 必須置於 ORDER BY 和 LIMIT 之前ONLY_FULL_GROUP_BY SQL 模式未啟用 (預設關閉),嚴格模式下需明確指定彙總函數ORDER BY id 確保取最小 id