2011-06-01 59 views
4

我正在查找一个SQL查询来选择未被同一个表上的另一个查询选中的所有记录。 具体而言,我想选择所有具有特定字段('fieldA')重复的记录,然后删除除这些记录之外的所有记录。SQL:选择未被另一个查询选中的所有记录

所以select语句可能类似于以下(不工作!):

select * from table where id not in(select * from table group by fieldA)

如果一个查询是不可能的,那么这将是最有效的解决方案?

+1

更改*为'id'在内的SELECT语句......不说不行? – 2011-06-01 18:03:33

+0

我已经尝试过,但phpMyAdmin崩溃。 – grai 2011-06-01 18:31:14

+2

哪一行的标准是什么? – 2011-06-01 18:47:55

回答

2

具体来说,我想选择所有具有特定字段重复的记录('fieldA'),然后删除除这些记录之外的所有记录。

在这种情况下,join it

delete x 
from myTable x 
join myTable z on x.field = z.field 
where x.id > z.id 
+2

+1不错,没有聚合!你应该添加回答,如果你想'MAX(ID)',这将保持'MIN(ID)',那么你只需将方向反转到'x.id 2011-06-01 19:33:47

+0

抱歉,延迟回复。这个答案很棒,正是我期待的 - 谢谢! – grai 2011-06-05 21:30:18

1

喜欢的东西:

SELECT id FROM table WHERE id IN (
    SELECT MIN(id) FROM table GROUP BY fieldA HAVING COUNT(*) > 1 
) 
相关问题