删除数据库中除一条以外的所有记录

时间:2018-12-21 17:31:28

标签: sql spring-boot spring-data-jpa db2 spring-data

我必须删除所有匹配ID的记录,只有一个除外。我没有可以考虑的dat列。 dtatastruchtur e如下所示:

OBJECT_ID - primary key
DOC_ID
FIRST NAME
LAST NAME

我正在尝试删除所有与特定号码匹配的doc_ID,除了一个到jpa。找不到任何JPA特定功能。我正在实现JPARepository。全部删除,有什么办法可以实现?

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    public User save(User user);

    public void deleteAllByDocID(String docID);
}

更新:对不起不确定数据库:我们正在使用DB2,我试图写下这些查询:

  DELETE FROM USR WHERE OBJ_ID NOT IN (SELECT OBJ_ID FROM USR WHERE DOC_OBJ_ID='91298' FETCH FIRST 1 ROWS ONLY); - this gives me error transaction log is full.

此:

  DELETE FROM USR WHERE OBJ_ID NOT IN (SELECT TOP(1) OBJ_ID FROM USR WHERE DOC_OBJ_ID='91298'); - and this give me error TOP is not a function

2 个答案:

答案 0 :(得分:1)

您可以先COUNT个匹配记录,然后再使用LIMIT N-1删除

答案 1 :(得分:1)

如果您不想使用自定义查询,可以这样做:

在存储库中定义这两种方法

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

   User findFirstByDocIDOrderByObjectIDAsc(String docID);
   void deleteAllByDocIDAndObjectIDNot(String docID, Long objectID);
}

然后在您的服务层执行此操作

User user = repository.findFirstByDocIDOrderByObjectIDAsc(docID);
if(user !=null) deleteAllByDocIDAndObjectIDNot(docID, user.objectID);

请注意,由于此解决方案使用派生的删除查询,因此它将逐个删除记录。