【问题标题】:How do delete rows where column matches any of set using SQL query?如何使用 SQL 查询删除列与任何集合匹配的行?
【发布时间】:2026-02-03 05:30:01
【问题描述】:

我正在尝试删除行中每一列都与给定键匹配的行。在这里,我想做一个批量操作,如果它的值在任何列表中匹配,我将删除所有行。我们可以循环遍历,一个一个删除,例如

for(Entries entry: list) // 删除 where column = entry

我正在寻找使用 SQL 和 Java 作为批处理操作的上述操作。有点像,

删除列与任何列表匹配的行

public ResponseEntity deleteEntries(@RequestBody String ids) throws SQLException {
        String[] entries = ids.split(",");
        for(int i = 0; i < ids.length; i++) {
            PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM  LIST_ITEMS WHERE ID = ? ");
            preparedStatement.setInt(1, ids[i]);
            preparedStatement.executeQuery();
        }
        return new ResponseEntity(HttpStatus.OK);
    }

批量运行上述查询,因为我将删除 1000 到 10K 个项目,如何批量运行上述查询?

【问题讨论】:

  • 您始终可以将 id 作为 xml 传递,然后从 id 在子查询中的表中删除 select ids from xml。

标签: java sql jdbc


【解决方案1】:

您可以使用 IN key world 在查询中传递列表,而不是:

DELETE FROM  LIST_ITEMS WHERE ID = ? 

你可以使用:

DELETE FROM  LIST_ITEMS WHERE ID IN (?)
                                 ^^

您的代码可能如下所示:

String query = "DELETE FROM  LIST_ITEMS WHERE ID IN (?)";
PreparedStatement preparedStatement = connection.prepareStatement(query);
Array array = preparedStatement.getConnection().createArrayOf("VARCHAR", entries);
preparedStatement.setArray(1, array);
preparedStatement.executeQuery();

【讨论】:

  • IN,很好,我测试了它并且它有效。快速提问 - 即使在一个巨大的数据集中只有 10 行,IN 操作也比 while 正确?
  • @bash 确切地说,最好直接在 RDBM 中而不是代码中处理您的操作。
  • 知道使用IN 的数组并不适用于所有数据库系统或JDBC 驱动程序。
  • 正是@MarkRotteveel,这是一个好点,例如对于postgresql,我们必须使用ID = Any(?)