java 如何从数据库中获取链信息?

f2uvfpb9  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(142)

我有一个名为“referral”的表,它包含两个名为“refer_by”和“refer_to”的列。“refer_by”列存储用户的ID,谁推荐某人,“refer_to”存储用户的ID,谁被“refer_by”用户推荐。
以下是存储的信息。
| 一个标题|又一个头球|
| --------------|--------------|
| 1|二|
| 1|五|
| 二|六|
| 五|七|
| 七|八|
| 八|九|
| 九|10个|
| 十五岁|十六岁|
| 十八岁|二十|
我想获取refer_by=1的所有引用列表。例如refer_by=1 refer 2和5,2 refer 6,5 refer 7等等。
我正在使用以下查询,但它失败了,原因是“ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR:对查询“referral”的递归引用不能出现在其非递归项“”中。

@Query(value = "WITH RECURSIVE referral AS " +
            "( " +
                "SELECT ref1.* FROM referral ref1 WHERE ref1.refer_by =:referByUserId " +
                    "UNION ALL " +
                "SELECT ref2.* FROM referral ref2 " +
                    "INNER JOIN " +
                "referral ref3 ON ref2.refer_by = ref3.refer_to " +
            ") " +
            "SELECT reff.refer_by, reff.refer_to FROM referral reff", nativeQuery = true)
    List<Object[]> testt(final Long referByUserId);

请帮帮我谢谢

cetgtptt

cetgtptt1#

问题是递归CTE与表(referral)同名,数据库无法解决这种二义性。
我建议对CTE使用不同的别名,如:

WITH RECURSIVE cte AS (
    SELECT * FROM referral WHERE refer_by =:referByUserId
    UNION ALL
    SELECT r.* 
    FROM cte c
    INNER JOIN referral r ON r.refer_by = c.refer_to
)
SELECT refer_by, refer_to FROM cte

相关问题