Select
如何選擇不同的記錄?
我有一張桌子,如下:
ID | Name | MyID 1 | Alan | 2 2 | Alan | 2 3 | John | 3
我想選擇記錄如下:
- 如果兩條記錄在“名稱”列中具有重複值,則僅選擇第一條記錄並丟棄另一條記錄,即使兩條記錄在其他列中具有不同值也是如此。
- 如果兩條記錄具有不同的“名稱”值,則它們通過“MyID”列按升序排序。
- 應返回記錄的所有列。
因此對於上述記錄,查詢應選擇以下記錄:
ID | Name | MyID 1 | Alan | 2 3 | John | 3
如何編寫查詢?看來我應該使用 DISTINCT 或 GROUP BY,但我的查詢都失敗了。請幫忙。
謝謝
此查詢帶有
DISTINCT
:SELECT DISTINCT Name, MyID FROM data;
返回不同的
Name
和MyID
:Name | MyID Alan | 2 John | 3
此查詢帶有
GROUP BY
:SELECT MIN(ID) AS ID, Name, MyID FROM data GROUP BY Name, MyID;
返回
Name
並MyId
使用最小ID
的樣本:ID | Name | MyID 1 | Alan | 2 3 | John | 3
這兩個查詢都在這個SQL Fiddle中,並且可以與大多數 RDBMS 一起使用。(範例使用 SQL Server)
我猜這就是你所追求的。
SELECT MIN(ID) AS ID, Name, MyID FROM tablename GROUP BY MyID, Name;
如果
Name
兩者之間可以不同MyID
,它會變得有點複雜。SELECT ID, Name, MyID FROM ( SELECT ID, Name, MyID, ROW_NUMBER() OVER (PARTITION BY MyID ORDER BY ID) AS _rn FROM tablename ) AS sub WHERE _rn=1;