mysql单表递归查询(jpa[org.hibernate.QueryException: Space is not allowed afterQuery parameter prefix ':'])
最新推荐文章于 2022-08-26 10:37:41 发布
feichen2016
最新推荐文章于 2022-08-26 10:37:41 发布
阅读量2.3k
组织表字段id,及parentId,数据库mysql5.7
①解决的问题点:需要查出一个组织树结构,根据指定ID获取当前ID的所有子树。
select id,
parent_id
from (select * from hrm_organization
order by parent_id, id) organization,
(select @pv := '18') initialisation
where find_in_set(parent_id, @pv) > 0
and @pv := concat(@pv, ',', id);
②解决的问题点:查出一条线性结构,查询当前ID的所有父级
SELECT
t.id,
@pv := t.parent_id
FROM
(
SELECT
*
FROM
hrm_organization
ORDER BY
id DESC
) t
JOIN (SELECT @pv := 31 from hrm_organization) tmp
WHERE
t.id =@pv;
③解决【:】错误问题:在:前加转义字符【\\】
SELECT @pv \\:= :organizationId
@Query(nativeQuery = true, value="SELECT id,name,budget_number,parent_id,description FROM hrm_organization WHERE del_flag = FALSE ORDER BY parent_id,id) organization, (SELECT @pv \\:= :organizationId) initialisation WHERE find_in_set(parent_id, @pv) > 0 AND @pv \\:= concat(@pv, ',', id) ")
mysql单表递归查询(jpa[org.hibernate.QueryException: Space is not allowed afterQuery parameter prefix ':'])
组织表字段id,及parentId,数据库mysql5.7①解决的问题点:需要查出一个组织树结构,根据指定ID获取当前ID的所有子树。select id, parent_id from (select * from hrm_organization order by parent_id, id) organization,
@Override
public Page findBySpecification() {
Specification specification = new Specification() {
@SneakyThrows
出处:在
mysql
中可以运行,但用
hibernate
查不能识别”:=”,求高手解决。。。比如语句 SELECT(@i:=@i+1) as i, a.* from PM_REGISTER_USER_RELATION a,(select @i:=0) as it ; 结果带有“序号”
直接在
MySQL
执行是没有任何问题的,但是在
hibernate
中执行 因为有 “:=” 所以会报异常 Spac
z_user(id,name,age),z_role(id,name),z_role_user(id,user_id,role_id);
其中z_role_user是关联表,user和role的关系是多对多,所以用到了@ManyToMany注解;
下面是三个实体:
@Entity
@Table(name = "z_user")
public class UserX {
@Id()
@GeneratedValue(strategy = GenerationType.
写这个的初衷在于让自己对方法的应用更加深刻,废话不多进入今天的主题.
Mysql
单表
递归查询
(文章主要借鉴于网络).
首先建表nodelist.
CREATE TABLE nodelist(
id INT PRIMARY KEY, //本节点ID。
nodename VARCHAR(20), //节点名称,为方便辨别而已。
pid INT //父节点。
接着插入表数据.
Insert IN
CREATE TABLE `dept` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`deptid` int(11) DEFAULT NULL,
PRIMARY KE...
在
MySQL
中实现
单表
递归查询
的方法是使用WITH RECURSIVE子句。首先,你需要创建一个临时表并初始化数据。然后,利用
递归查询
子句将查询结果不断代入到查询中进行下一轮的查询操作。接下来,使用
递归查询
子句和相关的条件和操作符来构建
递归查询
语句。最后,使用SELECT语句来查询最终结果。
这里是一个示例的
递归查询
语句:
WITH RECURSIVE temp AS (
SELECT * FROM table_name WHERE condition
UNION ALL
SELECT t.* FROM table_name t INNER JOIN temp t2 ON t2.id = t.parent_id
SELECT * FROM temp;
在这个示例中,temp是临时表的别名,table_name是你要查询的表名,condition是你的查询条件。在
递归查询
子句中,首先选择满足条件的初始数据,然后通过INNER JOIN将temp表与原表进行关联,继续查询满足条件的数据,直到没有满足条件的数据为止。
请注意,
递归查询
可能会导致性能问题,因此在使用时需要慎重考虑。同时,确保在
递归查询
子句中使用适当的条件和操作符,以避免无限
递归
导致的死循环。