You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从递归查询结果中删除冗余行,仅获取完整书籍系列拼接路径

修复后可实现需求的SQL语句

WITH RECURSIVE book_series AS (
    -- 递归锚点:取每本没有前传的书作为系列起点(也就是不存在于Prequels表的bookID列的书籍)
    SELECT 
        b.title AS full_series,
        b.bookID AS current_book_id
    FROM Books b
    WHERE NOT EXISTS (
        SELECT 1 FROM Prequels p WHERE p.bookID = b.bookID
    )
    UNION ALL
    -- 递归部分:每次往后拼接当前书籍的后续作品
    SELECT 
        CONCAT(bs.full_series, ' -> ', b.title),
        p.bookID AS current_book_id
    FROM book_series bs
    JOIN Prequels p ON p.prequelID = bs.current_book_id
    JOIN Books b ON b.bookID = p.bookID
)
-- 过滤只保留完整系列:也就是当前书没有后续作品(不存在于Prequels表的prequelID列)
SELECT full_series AS 完整书籍系列
FROM book_series
WHERE NOT EXISTS (
    SELECT 1 FROM Prequels p WHERE p.prequelID = current_book_id
)
ORDER BY full_series;

逻辑说明

  1. 递归锚点直接定位系列的第一本书,避免后续额外补全开头书籍的逻辑,减少冗余计算。
  2. 从首本书开始顺着前传关系往后拼接每一本后续作品,每一步都记录当前拼接后的完整字符串和当前链的最后一本书ID。
  3. 结果仅保留链的最后一本书没有后续作品的记录,也就是最长的完整系列,自动过滤所有中间拼接结果。

使用你提供的权游系列样例数据执行后,会返回唯一符合要求的结果:
A Game of Thrones -> A Clash of Kings -> A Storm of Swords -> A Feast for Crows -> A Dance with Dragons

内容的提问来源于stack exchange,提问作者user1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:06:03