SQL:选择未被其他查询选择的所有记录

时间:2011-06-01 18:00:52

标签: mysql sql

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

所以select语句可能类似于以下内容(不起作用!):

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

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

3 个答案:

答案 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/