SQL:选择所有未被另一个查询选中的记录

4
我正在寻找一条SQL查询语句,以选择与同一张表上的另一个查询未选中的所有记录。 具体来说,我想选择所有具有特定字段('fieldA')的重复记录,然后删除除其中一个记录外的所有记录。
因此,选择语句可能类似于以下内容(但无法正常工作!):
select * from table where id not in(select * from table group by fieldA)
如果单个查询不可行,则最有效的解决方案是什么?

1
在内部SELECT语句中将*更改为id,这样不行吗? - Dan J
我已经尝试过了,但是phpMyAdmin崩溃了。 - questioner
2
哪些条件决定了哪一行会保留? - Tom H
3个回答

3
具体地说,我想选择所有具有特定字段(“fieldA”)的重复记录,然后删除除其中一个记录之外的所有记录。
在这种情况下,使用连接
delete x 
from myTable x
 join myTable z on x.field = z.field
where x.id > z.id

2
+1 不错,没有聚合!你应该在回答中添加这一点,如果你想要 MAX(ID),那么只需要将方向反转为 x.id < z.id 就可以了。 - Conrad Frix
抱歉回复晚了。这个答案太棒了,正是我想要的 - 谢谢! - questioner

1

类似这样:

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接