在 SQL 家族树 WITH 子句中查找共同祖先,表不存在

问题描述

我看了 How to get lowest,common parent for 2 rows in recursive table (SQL) 他们建议的地方:

WITH
    hier1 (id,parent) AS (
    SELECT      id,parent
    FROM        table
    WHERE       id = @user1
    UNION ALL
    SELECT      id,parent
    FROM        table l,hier1 h
    WHERE       l.id = h.parent
    ),hier2 (id,parent
    FROM        table
    WHERE       id = @user2
    UNION ALL
    SELECT      id,hier1 h
    WHERE       l.id = h.parent
    )
SELECT  TOP 1 hier1.id
FROM    hier1,hier2
WHERE   hier1.id = hier2.id

我改变了我的东西:

WITH hier1(ID,motherID,fatherID) AS (
    SELECT ID,fatherID
    FROM persons
    WHERE ID = 3 -- example
    UNION ALL
    SELECT ID,fatherID
    FROM persons l,hier1 h
    WHERE l.ID = h.motherID OR l.ID = h.fatherID),hier2(ID,fatherID) AS(
    SELECT ID,fatherID
    FROM persons
    WHERE ID = 17 -- example
    UNION ALL
    SELECT ID,hier1 h
    WHERE l.ID = h.motherID OR l.ID = h.fatherID)
SELECT hier1.ID
FROM hier1,hier2
WHERE hier1.ID = hier2.ID
LIMIT 1

但是得到:

表 'familytree.hier1' 不存在

它还说:

无法识别的语句类型。 (在位置 0 的“WITH”附近)

我使用 MariaDB。 MariaDB documentation for WITH

我试着在这里寻找答案: Oracle WITH CLAUSE not working?

似乎对某些人有效,对某些人无效..?我希望得到一些指导!

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)