表 MyImage (ID, PATH),找出同一 ID 下存在多個不同 PATH 的 ID 清單。
| ID | PATH |
|---|---|
| 1 | C:/ |
| 1 | C:/ |
| 1 | D:/ |
| 2 | C:/ |
| 2 | C:/ |
| 3 | A:/ |
| 3 | C:/ |
| 4 | D:/ |
預期結果:1, 3(ID 2 僅單一 PATH,ID 3 僅一筆資料)
SELECT ID
FROM MyImage AS A
GROUP BY ID
HAVING COUNT(DISTINCT PATH) > 1;
GROUP BY ID:按 ID 分組COUNT(DISTINCT PATH):計算組內去重後的 PATH 種類數HAVING ... > 1:保留種類數 ≥ 2 的組SELECT ID FROM MyImage AS A
GROUP BY ID
HAVING (
SELECT COUNT(DISTINCT Path) FROM MyImage AS B WHERE B.ID = A.ID
) > 1;
缺點:每組執行一次子查詢,大資料量嚴重拖慢。推薦使用上方標準聚合寫法。
SELECT ID, PATH
FROM MyImage
WHERE ID IN (
SELECT ID FROM MyImage GROUP BY ID HAVING COUNT(DISTINCT PATH) > 1
);