SQL 怎么排除有子项的列表?

怎么写 SQL 能查询红色(无子项)排除蓝色(有子项)?

747827bad5c7b08977feac5ebf4c1013.png

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20250 引用 • 78338 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7075 引用 • 32031 回帖 • 216 关注

相关帖子

被采纳的回答
  • zxhd86 1
    select * from blocks 
    where
    id not in (select parent_id from blocks where type = 'l')
    and type = 'i'
    and subtype = 't'
    limit 10
    

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 阿巴阿巴,没太看懂需求。

    1 回复
  • 其他回帖
  • 性能确实差,目前一次查询要半秒,放到数据库模板列之后更撑不住。

    还有优化的方法吗?如果 SQL 没法优化的话,思源有办法通过什么方式优化吗?


    我给每个查询都加上了 and root_id = '20240402135122-f5usqip' ,效率提升 2/5 。

    1 回复
    2 操作
    JeffreyChen 在 2024-05-31 23:47:22 更新了该回帖
    JeffreyChen 在 2024-05-31 23:47:07 更新了该回帖
  • 这个需要用到递归,可能不是这么好理解:

    WITH RECURSIVE finish_tree AS (
        -- 非递归部分:选择根节点
        SELECT id, parent_id
        FROM blocks
        WHERE 
        markdown like "* [x]%"
    
        UNION ALL
    
        -- 递归部分:选择所有子节点
        SELECT fi.id,  fi.parent_id
        FROM blocks as fi
        INNER JOIN finish_tree as ft ON fi.parent_id = ft.id
    )
    select * from blocks
    where
    id not in (select id from finish_tree)
    and root_id = '20240522181405-mdiudfl' 
    and type = 'i'
    and subtype = 't'
    limit 10
    
    1 回复
  • @zxhd86 我脑子已经烧掉了,这个 SQL 能做吗:

    image.png

    我用下面这个 SQL 会查询到 5 ,但查不到 6 :

    (只能查询到 5 ,6 因为带有未完成的间接子任务所以被忽略了)

    /* 排除父任务已完成的所有子任务id */
    WITH RECURSIVE finish_tree AS ( 
        -- 非递归部分:选择根分类 
        SELECT id, parent_id 
        FROM blocks 
        WHERE 
        markdown like '* [x]%' 
        and type = 'i' 
        and subtype = 't' 
    
        UNION ALL 
    
        -- 递归部分:选择所有子分类 
        SELECT fi.id,  fi.parent_id 
        FROM blocks as fi 
        INNER JOIN finish_tree as ft ON fi.parent_id = ft.id 
    ) 
    SELECT * FROM blocks WHERE 
    root_id = '20240402135122-f5usqip' 
    AND type = 'i' 
    AND markdown LIKE '* [ ]%' 
    AND id not in (select id from finish_tree) 
    AND id not in (SELECT parent_id FROM blocks WHERE type = 'l' AND markdown LIKE '%* [ ]%') 
    /* 该块[任务列表项块]的id 不是(未完成的任务列表块的父块[任务列表项块]id) [注:任务列表块的父块是上层任务列表项块] */
    
    1 回复
    1 操作
    JeffreyChen 在 2024-05-31 20:47:37 更新了该回帖
  • 查看全部回帖
JeffreyChen
思源笔记同步教程:ld246.com/article/1692089679062

推荐标签 标签

  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖
  • 安装

    你若安好,便是晴天。

    131 引用 • 1184 回帖
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    28 引用 • 66 回帖 • 8 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 192 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 366 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖 • 1 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 456 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注
  • OnlyOffice
    4 引用 • 12 关注
  • 分享

    有什么新发现就分享给大家吧!

    245 引用 • 1776 回帖 • 2 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    41 引用 • 40 回帖 • 1 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 95 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖
  • gRpc
    11 引用 • 9 回帖 • 54 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 473 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    175 引用 • 994 回帖 • 1 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 285 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    331 引用 • 1716 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 469 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 272 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 249 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 648 关注