【问题标题】:Select single row for column value为列值选择单行
【发布时间】:2013-05-23 10:47:31
【问题描述】:

这是动态的示例表数据。

ColId 名称 JobId 实例 1 啊啊啊啊 1 2dc757b 2 bbbbbbbb 1 2dc757b 3 啊啊啊啊 1 010dbb8 4 bbbbbbbb 1 010dbb8 5 bbbbbbbb 1 faa2733 6 啊啊啊啊 1 faa2733 7 啊啊啊啊 1 bc13d69 8 啊啊啊啊 1 9428f4d

我想要像

这样的输出 ColId 名称 JobId 实例 1 啊啊啊啊 1 2dc757b 3 啊啊啊啊 1 010dbb8 5 bbbbbbbb 1 faa2733 7 啊啊啊啊 1 bc13d69 8 啊啊啊啊 1 9428f4d

JPA 查询应该是什么,以便我可以检索只有单个“实例”的整行(不涉及最大最小条件)。 每个“实例”值都需要一行

【问题讨论】:

标签: java database jpa


【解决方案1】:

FROM table t GROUP BY t.instance 应该适合您的需求。

【讨论】:

  • @anotherNovice1984 你确定这不是你要找的吗?它不会列出所有行:每个 instance 只有一行。看看demo 的行为如何(它是 MySQL,但我猜 JPA 必须以相同的方式实现它)。
  • 不确定Oracle 11.2.0.3.0(我正在使用的版本)是否有问题。希望你知道它不允许像“SELECT * FROM my_table GROUP BY last_name;”这样的命令而不是“select *”,它需要列名,并且所有提到的列都应该在 GROUP BY 子句中。我尝试明确提及所有列,它返回所有行@sp00m
  • @anotherNovice1984 我认为您也可以通过简单地使用FROM table t GROUP BY t.instance 来省略SELECT ... 部分(正如我在回答中所说的那样——这不是疏忽:))。至少HQL 允许。
  • @anotherNovice1984:我认为这应该可行,但问题是您可能正在使用creatQuery("select...")createNameQuery("select....") 尝试使用createNativeQuery("select...")
  • SQL 不应允许返回不在 group by 中的列值,因为它不知道要选择哪些不同的可能值。仅当使用 Meherzad 的评论中显示的 row num 和 prev value db 特定 SQL 解决方案时,本机查询才会有所帮助
【解决方案2】:

类似于 JPQL“从 entity.id 所在的实体实体中选择实体(通过 subinstance.instance 从实体子实例组中选择 min(subinstance.id))”

在 group by 语句中未包含的列上允许使用 count、min、avg 等函数,因此如果它从分组中返回单个 id 值,则任何此类都应该有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2018-02-08
    • 2012-10-17
    • 2020-05-20
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多