如何从子查询中获取结果作为查询中的参数

Posted

技术标签:

【中文标题】如何从子查询中获取结果作为查询中的参数【英文标题】:HOw to get result from subquery as param in query 【发布时间】:2019-03-25 11:38:22 【问题描述】:

如何编写查询,以便我想将子查询的结果设置为主查询的参数。 书面查询在 postgreSQL 查询编辑器中工作正常,设置虚拟值作为参数

错误日志:

org.hibernate.QueryException: Space is not allowed after parameter prefix ':'[select * from public.users as u where u.username=:username and u.password=:password and u.role_id=:(select id from public.user_roles as ur where ur.role=:user_type)] 
at org.hibernate.engine.query.spi.ParameterParser.parse(ParameterParser.java:175) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]" 

源代码:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.hcs.sws.model.User;

@Repository
public interface UserRepository extends JpaRepository<User, Integer> 
    @Query(value ="select * from public.users as u where u.username=:username and u.password=:password and u.role_id=:(select id from public.user_roles as ur where ur.role=:user_type)",nativeQuery=true)
    public int authenticateUser(@Param("username") String username,@Param("password") String password,@Param("user_type") String user_type);

【问题讨论】:

【参考方案1】:

首先我从子查询中获取结果,然后将其存储在 java 代码中的变量中。之后将该变量用于主查询。

int role_id=userRoleRepository.findIdByRole(user_type);
        int res = userRepository.authenticateUser(username, password,role_id);
        System.out.println("Query Result: "+res);

【讨论】:

以上是关于如何从子查询中获取结果作为查询中的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何从子查询中的 2 个或多个字段中获取最大值

从子查询 SQL 中选择最大数据,但它显示来自子查询的所有结果

如何从子组件更改 react-komposer (meteor) 中的订阅查询参数?

如何从子查询中只获取一行?

如何在 Zend 中使用表上的子查询执行查询并获取 Rowset 对象作为结果?

如何在子查询中使用外部查询中的列从另一个表中获取结果?