要使用IN语句删除的复杂SQL查询

要使用IN语句删除的复杂SQL查询,sql,duplicates,sql-delete,Sql,Duplicates,Sql Delete,我对数据行有一个很大的问题,我最多有1k行,而数据行应该只有8行,我用SQL查询得到(我想)所有应该删除的行,就像这样 编辑:也没有PKEY,这就是复制的原因 select a1.ID, a1.serie, a1.tienda, a1.numtransa, a1.sistema, a1.factura, a1.jfecha, a1.codart from posmov a1 inner join posmov a2 on a1.tienda = a2.tienda and a1.numtran

我对数据行有一个很大的问题,我最多有1k行,而数据行应该只有8行,我用SQL查询得到(我想)所有应该删除的行,就像这样

编辑:也没有PKEY,这就是复制的原因

select  a1.ID, a1.serie, a1.tienda, a1.numtransa, a1.sistema, a1.factura, a1.jfecha, a1.codart from posmov a1
inner join posmov a2
on a1.tienda = a2.tienda
and a1.numtransa = a2.numtransa
and a1.sistema= a2.sistema
and a1.factura =a2.factura
and a1.jfecha = a2.jfecha
and a1.codart = a2.codart
and a1.serie =a2.serie
and a1.ID > a2.ID;
但是当我想删除它们并添加到最后一个查询时

delete from posmov
where ID  in ( LAST QUERY);
我得到

Msg 116, Level 16, State 1, Line 30
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

如果有更简单的方法,有人能告诉我查询或删除重复项吗。

只要在查询中选择ID,无论何时在中使用
,您都可以列出值('1'、'2'、'3'),或者您可以从子查询中选择一个字段,但不能选择多个字段:

delete from posmov
where ID  in (
              select  a1.ID
              inner join posmov a2
              on a1.tienda = a2.tienda
              and a1.numtransa = a2.numtransa
              and a1.sistema= a2.sistema
              and a1.factura =a2.factura
              and a1.jfecha = a2.jfecha
              and a1.codart = a2.codart
              and a1.serie =a2.serie
              and a1.ID > a2.ID)
或者,您可以使用
EXISTS

delete from posmov
where EXISTS ( LAST QUERY);

请注意,
EXISTS
语句几乎总是比
中的
快得多