如何在Spring Boot中访问公式内子查询中的表字段?

How to access table field in a subquery inside a formula in spring boot?

提问人:KRISTIJAN TOMASINI 提问时间:10/25/2023 更新时间:10/25/2023 访问量:21

问:

为了这个问题的目的,让我们用列来定义表。列包含的数据可能重复,也可能不重复。tcc

现在,我想创建一个虚拟列,其中包含一个布尔值,指示此行是否重复。

例如,如果我的表包含行,则我的查询应返回该表1,1,2,3SELECT

1 1
1 1
2 0
3 0

现在,我想出了如何检查单行是否重复。下面是执行此操作的代码:

SELECT IIF((SELECT COUNT(c) FROM [t] WHERE c = ?) > 1, 1, 0);

如果在 的位置具有给定值的行是重复的,则输出此行代码,如果不是。1c?0

如果我提前知道值,这很好用。 但是,我怎样才能使它适用于整个表呢?c

我想了这样:

SELECT c, IIF((SELECT COUNT(c) FROM [t] WHERE c = ?) > 1, 1, 0) FROM [t];

因此,通过使用子查询。但问题是,我怎么知道子查询中 c 的值是多少?那么,如何让服务器在执行子查询之前读取列,以及如何传递列的值而不是上面的例子中的列呢?cc?

这个问题的第二部分是如何使用 Spring Data Java 持久性应用程序编程接口 (JPA) 来做到这一点?因为我没有直接执行这个查询,所以我需要 Hibernate 来制作它并为我执行它。

这是我在 Java 中的实体类:

@Entity
@Subselect(value = "select DISTINCT t.c from t t")
public class T
{
    @Column(name = "c")
    private Integer c;

    @Formula(value = "IIF((SELECT COUNT(c) FROM [t] WHERE c = ?) > 1, 1, 0)")
    private Boolean isDuplicate;
}

但是我不知道如何放置注释而不是内部注释。c?@Formula

我的服务器是 Microsoft 结构化查询语言服务器 2019。

java sql sql 服务器 spring-data-jpa sql-server-2019

评论

0赞 siggemannen 10/25/2023
我不知道 jpa,但为什么不直接修复@Subselect查询,以便它生成重复的列?一个简单的应该做到case when COUNT(*) OVER(PARTITION BY c) > 1 THEN 1 ELSE 0 END

答: 暂无答案