当前位置: 首页 > 知识库问答 >
问题:

OpenJPA/MySQL:在where子句中使用同一表时修改表

蒋俊人
2023-03-14

我想通过openJPA和MySQL执行一个删除查询。

以下mysql语句工作正常:

delete from GENERIC 
 where PARENT_ID not in (select g2.ID from (select * from GENERIC) g2);
entityManager.createQuery("delete from GenericEntity g1 where " +
   "g1.parentId not in " +
   "(select g2.id from (select * from GenericEntity) g2)"
).executeUpdate();

我将非常感谢一个提示,如何继续或链接到任何有用的材料。提前非常感谢!

共有1个答案

周阳成
2023-03-14

经过大量研究,我找到了解决办法。将select从delete查询中分离出来,并将IDs列表作为参数传递给delete语句,效果很好:

List<Integer> idList = entityManager
    .createQuery("select g.id from GenericEntity g",Integer.class)
    .getResultList();
entityManager
    .createQuery("delete from GenericEntity g where g.parentId not in (:idList)")
    .setParameter("idList", idList)
    .executeUpdate();
 类似资料:
  • 问题内容: 假设我有这张桌子 我想返回第一行,其中所有先前现金的总和大于某个值: 因此,例如,如果我要返回第一行,其中所有先前现金的总和都大于500,则应返回到第3行 如何使用mysql语句执行此操作? 使用 不起作用 问题答案: 您只能在HAVING子句中使用聚合进行比较: 该子句要求您定义GROUP BY子句。 要获得第一行,其中所有先前现金的总和都大于某个值,请使用: 由于聚合函数发生在子查

  • 问题内容: 我想搜索我的表,其中有一列名字和一列姓氏。我目前接受来自某个字段的搜索字词,并将其与两列进行比较,一次 这对于单个单词搜索词可以正常工作,但结果集包含名称为“ Larry”的所有人。但是,如果有人输入名字然后输入空格,然后输入姓氏,我希望搜索结果更窄。我已经尝试了以下方法,但没有成功。 有什么建议吗? 编辑: 我正在测试的名称是“拉里·史密斯”。数据库将“ Larry”存储在“ fir

  • 如何将行号用作where子句的一部分? 我有,假设,25个数据,我只想得到前10行或得到从11到20的行。 如何使用行号?我无法执行下面的查询 更新:问题是,在我的where子句中,row_number在表UPDATE2:Thanks Guys中是未知的!不管怎样,我找到了这个。选择行号=行号的位置

  • 问题内容: 我已经让用户在表中输入需要查询的值列表。该列表可能非常大,并且在编译时长度未知。而不是使用我在想的是,使用临时表并对其执行联接会更有效。我在另一个SO问题中阅读了此建议(目前无法找到,但在编辑时会进行编辑)。 要点是这样的: 如果我有两个同时进行,如果线程2尝试在线程1之后创建TEMP表,我不会收到错误消息吗? 我应该为TEMP表随机生成一个名称吗? 或者,如果我将整个内容包装在交易中

  • 问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。

  • 问题内容: 我如何使它对任何数字格式和任何数字都有效 目前仅对1-999-999-9999有效 问题答案: 采用: 参考: 模式匹配