我正在寻找一个SQL查询来选择同一个表上另一个查询未选择的所有记录。 具体来说,我想选择所有具有特定字段('fieldA')重复的记录,然后删除除这些记录之外的所有记录。
所以select语句可能类似于以下内容(不起作用!):
select * from table where id not in(select * from table group by fieldA)
如果单个查询不可能,那么最有效的解决方案是什么?
答案 0 :(得分:2)
具体来说,我想选择所有具有特定字段('fieldA')副本的记录,然后删除其中一条记录。
在这种情况下,join it:
delete x
from myTable x
join myTable z on x.field = z.field
where x.id > z.id
答案 1 :(得分:1)
类似的东西:
SELECT id FROM table WHERE id IN (
SELECT MIN(id) FROM table GROUP BY fieldA HAVING COUNT(*) > 1
)
答案 2 :(得分:0)
如果您将非IN子SELECT语句更改为仅返回一列(ID),则它应该起作用 -
http://blog.sqlauthority.com/2008/04/22/sql-server-better-performance-left-join-or-not-in/