【问题标题】:Use select distinct in JPQL and retrieve all columns在 JPQL 中使用 select distinct 并检索所有列
【发布时间】:2016-12-31 17:15:24
【问题描述】:

我正在使用 JPQL,我想使用 DISTINCT 删除所有重复的行,同时检索表中的所有列,我写了这样的内容:

SELECT DISTINCT cl.name, cl.age 
FROM Client AS cl
WHERE cl.country='****'

此查询仅返回 nameage 两列。

【问题讨论】:

  • 您能准确描述一下您的期望吗? Client 的所有列对于特定的 country,其中没有 nameage 出现不止一次,也许?
  • 是的,就是这样
  • 好吧,假设您有两个客户,他们的姓名和年龄相同,但护照号码不同。在这种情况下你想做什么?
  • 好吧,在这种情况下,护照号码对我来说并不重要,我只是消除了两个客户之一

标签: java jpa select distinct jpql


【解决方案1】:

假设您有一个唯一的id,您可以编写查询以使用GROUP BY,如下所示:

SELECT client FROM Client client
WHERE client.id IN (
    SELECT MIN(c.id)
    FROM Client c
    WHERE c.country='****'
    GROUP BY c.name, c.age
)

您不应检索Client 的所有字段,因为您不应选择非聚合字段。

【讨论】:

  • 我的问题是选择客户,而不是从客户中删除,但无论如何这回答了我的问题
  • 我使用DELETE 来适应您的评论。但接受了您的编辑以回答您的实际问题。
【解决方案2】:

试试这个:

DELETE from Client c
Where c.name IN (SELECT DISTINCT cl.name
                 FROM Client AS cl
                 WHERE cl.country='****')

但请注意您的持久性上下文以避免损坏数据。

【讨论】:

  • 这不起作用,因为我需要选择客户端并消除具有相同名称和年龄的行
猜你喜欢
  • 2016-12-17
  • 2014-09-06
  • 1970-01-01
  • 2012-10-07
  • 2013-09-15
  • 2021-05-20
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
相关资源
最近更新 更多