我的意思是留下任何重複的記錄如何只選擇唯一的記錄
例如
ID NAME
1 a
2 a
3 b
4 b
5 c
所需的輸出。
僅限5 c
我厭倦了試試這個。所以我不認爲我沒有任何合理的代碼粘貼在這裏。
我的意思是留下任何重複的記錄如何只選擇唯一的記錄
例如
ID NAME
1 a
2 a
3 b
4 b
5 c
所需的輸出。
僅限5 c
我厭倦了試試這個。所以我不認爲我沒有任何合理的代碼粘貼在這裏。
這裏是另一個可能的方式:
select min(id), name from table group by name having count(*) = 1
雖然這適用於他的示例集,但在一般意義上,我認爲min()將不起作用。 – 2014-10-28 01:15:43
@UncleIroh在這種情況下,它應該,因爲我們只限於查詢唯一的記錄(即'有count(*)= 1'子句),它*保證*每個組只有一個記錄,因此' min()'函數對結果沒有影響(因爲每個組只有一組)。它存在的唯一原因是因爲在查詢中有一個「group by」,而「id」列沒有分組,所以它需要在一個聚合函數中。 – Ruslan 2014-10-28 01:16:50
它似乎沒有最小的工作。儘管如此,我還是得好好考驗。 – Narayan 2014-10-28 01:20:07
這裏有一種方法:
select t.*
from table t
where not exists (select 1
from table t2
where t2.name = t.name and t2.id <> t.id
);
這裏是另一種方式:
select t.*
from table t join
(select name, count(*) as cnt
from table t
group by name
having cnt = 1
) tt
on tt.name = t.name;
我想你想在你的第一個例子t2.id <> t.id – 2014-10-28 01:14:40
@UncleIroh是正確的,你需要檢查時,ids是不相等的,否則第一個一個不會返回任何結果。 – AdamMc331 2014-10-28 01:32:05
@ McAdam331。 。 。固定。 – 2014-10-28 01:33:03
select a.*
from table a
left join table b on a.name = b.name and a.id <> b.id
where b.id is null;
這是怎麼回事? – 2014-10-28 16:00:58
我認爲最乾淨的方式這樣做是爲每一行,分組選擇名稱和ID p,並且只對具有COUNT(*)爲1的值進行過濾。這意味着排除具有不唯一名稱的任何行。
它應該是這樣的:
SELECT id, name
FROM myTable
GROUP BY name
HAVING COUNT(*) = 1;
我不能讓SQL工作,但驗證了這一點在MySQL工作臺:
這裏是另一種方式來做到這一點:
SELECT * FROM table AS A
WHERE (SELECT COUNT(*) FROM table AS T
WHERE T.NAME = A.NAME) = 1
@UncleIroh看起來他只想要不重複的記錄。所以'獨特'在這裏是不適用的。 – 2014-10-28 01:14:39
@Jonno_FTW是啊對不起刪除我的評論一旦我意識到:) – 2014-10-28 01:18:19