我想在一个RESULTSET
个查询中更新SELECT
中UPDATE
的所有行。
这是我到目前为止所提出的:
SELECT id_queue, status FROM table WHERE status IN (0,2) ORDER BY status, id_queue ASC FOR UPDATE;
UPDATE table SET status = 97 WHERE id_queue= " + id_combined + ";
所以,我想我需要把所有id_queue
个ID,像1,2,3,4,5,6,7,8
一样放到id_combined
。
有任何想法在JAVA中做到这一点的最佳方法吗?
注意:我不只是尝试使用状态0&更新所有内容。 2到97,我想在其他地方使用select resultset。
答案 0 :(得分:5)
不确定您使用的是哪种SQL方言,但这值得一试:
update table set status = 97 where ID_queue in
(SELECT id_queue FROM table WHERE status IN (0,2))
答案 1 :(得分:1)
执行此操作的一种方法是嵌套查询。也就是说,你可以在你的UPDATE中放入一个SELECT,如下所示:
UPDATE table SET status = 97 WHERE id_queue IN (SELECT id_queue
FROM table
WHERE status IN(0,2))
Google for sql'nested query'或'subquery'获取更多信息。
答案 2 :(得分:1)
使用StringBuilder
收集ResultSet
中返回的ID号,然后使用此号码构建更新查询。
首先,执行查询并收集ID。
StringBuilder ids = new StringBuilder(); Statement statement = this.conn.createStatement(); statement.executeQuery("SELECT id_queue, status FROM table WHERE status IN (0,2) ORDER BY status, id_queue ASC;"); ResultSet rs = statement.getResultSet(); while (rs.next()) { if (ids.length() > 0) ids.append(','); ids.append(rs.getInt("id_queue")); } // use the resultset for whatever else you want rs.close();
然后,执行更新。
if (ids.length() > 0) { statement = this.conn.createStatement(); statement.executeUpdate("UPDATE table SET status = 97 WHERE id_queue In ("+ids.toString()+");"); }
答案 3 :(得分:0)
我的想法是(不工作代码)
List<Integer> ids = new ArrayList<Integer>();
for(Row row : ResultSet.rows()) {
ids.add(row.get("id_queue");
}
String sql = "UPDATE table SET status = 97 WHERE id_queue IN (" +
StringUtils.join(ids, ",") +
")";
使用StringUtils class from Apache。
显然,既然你说你不想将ResultSet中的所有项目转换为状态97:
为了完整起见,以下内容将使用纯SQL进行更新(如果您想修改所有行)
UPDATE table SET status = 97
WHERE status IN (0,2)
答案 4 :(得分:0)
为了避免错误,您需要为SELECT语句指定别名: 试试这个: UPDATE表SET status = 97 WHERE id_queue IN(SELECT * FROM(SELECT id_queue 从表 WHERE状态IN(0,2))MyResult) MyResult是选择查询的别名