一只阿木木

Distill:我用"三层高亮法"让笔记从"存过"变成"拿来就用"

Distill:我用"三层高亮法"让笔记从"存过"变成"拿来就用"

上周发生了一件很尴尬的事。

老板让我出一份"数据中台技术选型建议",给 CTO 汇报用。

我打开 Obsidian,搜索"数据中台"——搜到了 7 条相关笔记。

按理说,我应该很开心:经过这两个月的知识管理实践,我的 PARA 目录井井有条,Inbox 每周清零,相关资料都能搜到。

但我打开那 7 条笔记后,傻了。

第一条:一篇技术文章的全文摘录,1800 字,密密麻麻。我需要重新从头读一遍才能找到关键结论。

第二条:一段会议讨论记录,写了"讨论了 Lambda 架构和 Kappa 架构的优劣",但没有写结论是什么。

第三条:一个收藏的链接,标注了"不错的对比文章",但没有任何提炼。我点开链接——404 了。

第四条:倒是写了一句我自己的批注——"ClickHouse 适合 OLAP 场景"。但这句话太笼统了,我记不清当时的分析逻辑了。

剩下三条大同小异:有存,有组织,但没有"提炼"。

结果:我面对 7 条笔记,却几乎无法直接引用其中任何一条。我还是得重新搜索、重新阅读、重新思考。

这就像我建了一个数据仓库,数据都入库了,但没有做聚合、没有建宽表、没有写报表。原始数据堆在那里,要用的时候还得现跑 SQL。

这时候我才真正理解了 CODE 四步中第三步 Distill(提炼) 的意义:

Capture 解决的是"有没有"的问题。
Organize 解决的是"找不找得到"的问题。
Distill 解决的是"拿起来能不能直接用"的问题。

前两步做得再好,没有 Distill,你的知识库就是一堆"原始数据"——有价值,但提取价值的成本太高。

今天这篇,我来讲我是如何用**"三层高亮法"**把笔记从"存过"变成"拿来就用"的。


一、先理解 Distill 的本质:把"整篇笔记"压缩成"一眼能用"

Tiago Forte 在《打造第二大脑》里提出了一个核心概念叫 Progressive Summarization(渐进式总结)。

这个概念翻译成人话就是:

不要一次性把笔记整理成"完美状态"。而是每次接触这条笔记时,多做一层提炼——让它逐渐从"原始信息"变成"浓缩精华"。

为什么是"渐进式"?

因为你在 Capture 的时候,不知道这条笔记以后会怎么用。如果当场花 30 分钟写一篇精炼总结,很可能这条笔记以后根本用不到——那 30 分钟就白费了。

但如果你完全不提炼,等真正要用的时候再来整理,你已经忘了原文在讲什么——又要花 30 分钟重新理解。

渐进式总结的策略是:每次多花一点点时间,逐层提炼。

  • 第一次接触(Capture):存原文要点 + 一句话批注 → 1 分钟
  • 第二次接触(Organize/Distill):加粗关键句子 → 2 分钟
  • 第三次接触(Distill/Express):写出自己的总结 → 5 分钟

不是每条笔记都需要走完三层。只有被反复使用的笔记才值得深度提炼。

这就是"渐进"的含义:让笔记的"提炼深度"跟它的"使用频率"自然匹配。常用的自然越磨越精,不用的就停留在第一层,不浪费时间。

程序员类比:这就是 JIT 编译(Just-In-Time Compilation)。不是提前把所有代码都编译成机器码(AOT),而是运行时哪段代码被频繁执行(热点代码),才对它做深度优化。冷代码保持原样,不浪费编译资源。

二、三层高亮法:我在 Obsidian 里的具体做法

我把渐进式总结落地成了一套可操作的"三层高亮法"。每一层对应一个操作动作,层层递进。

Layer 0:原始状态(Capture 阶段已完成)

这是笔记刚进入 Obsidian 时的样子——有内容,有批注,但没有任何视觉层次。

示例:一条关于"CQRS 架构模式"的笔记

# CQRS 架构模式

> 来源:技术评审会讨论 + 文章阅读
> 日期:2024-05-10
> 关联:[[P-订单系统重构]]

CQRS 全称是 Command Query Responsibility Segregation,
即命令查询职责分离。核心思想是把系统的读操作和写操作
分离到不同的模型中处理。

传统的 CRUD 模式中,读和写共享同一个数据模型。当业务
复杂度增加时,一个模型很难同时满足复杂查询和复杂写入
的需求。CQRS 通过分离来解决这个矛盾。

Command 端(写)负责处理业务逻辑、校验规则、状态变更。
Query 端(读)负责提供查询视图,可以使用独立的读库、
缓存或搜索引擎来优化查询性能。

适用场景:读写比差异大的系统(如读多写少的电商商品页)、
读写模型差异大的系统(如订单系统写入复杂但查询简单)。

不适用场景:简单的 CRUD 系统、读写量差不多的系统。
引入 CQRS 会增加系统复杂度(需要维护两套模型和数据同步)。

CTO 在评审会上说了一句话:"不要为了架构优雅引入团队
驾驭不了的复杂度。"决定先在订单模块试点,不全面推广。

💡 我为什么存:订单重构正在选型,CQRS 是候选方案之一。
📌 可以用在:P-订单系统重构 的技术方案文档。

这是一条"合格"的笔记——有来源、有内容、有批注。但如果三个月后我要快速引用它,我需要重新读这一整段文字才能提取出关键信息。


Layer 1:加粗关键句(第一次提炼,耗时 2 分钟)

触发时机: 当我第二次打开这条笔记的时候(比如在 Organize 阶段把它从 Inbox 移到 Projects 时,或者在写方案时搜索到它时)。

操作: 通读一遍,把最关键的句子加粗。标准是:如果你只能读这条笔记中的 3 句话,你会读哪 3 句?

# CQRS 架构模式

> 来源:技术评审会讨论 + 文章阅读
> 日期:2024-05-10
> 关联:[[P-订单系统重构]]

CQRS 全称是 Command Query Responsibility Segregation,
即命令查询职责分离。**核心思想是把系统的读操作和写操作
分离到不同的模型中处理。**

传统的 CRUD 模式中,读和写共享同一个数据模型。当业务
复杂度增加时,一个模型很难同时满足复杂查询和复杂写入
的需求。CQRS 通过分离来解决这个矛盾。

Command 端(写)负责处理业务逻辑、校验规则、状态变更。
Query 端(读)负责提供查询视图,可以使用独立的读库、
缓存或搜索引擎来优化查询性能。

**适用场景:读写比差异大的系统、读写模型差异大的系统。**

不适用场景:简单的 CRUD 系统、读写量差不多的系统。
引入 CQRS 会增加系统复杂度(需要维护两套模型和数据同步)。

**CTO:"不要为了架构优雅引入团队驾驭不了的复杂度。"
决定先在订单模块试点,不全面推广。**

💡 我为什么存:订单重构正在选型,CQRS 是候选方案之一。
📌 可以用在:P-订单系统重构 的技术方案文档。

现在你快速扫一眼这条笔记,30 秒就能抓到核心:分离读写 / 适用于读写比差异大 / CTO 说先试点不全推。

不用逐字阅读,只看加粗部分就够了。


Layer 2:写出"我的总结"(第二次提炼,耗时 5 分钟)

触发时机: 当我真正要使用这条笔记的时候(比如写技术方案、准备汇报、或者向别人解释这个概念时)。

操作: 在笔记顶部新增一个 ## 我的总结 区块,用自己的话写出核心结论。这段总结的标准是:如果有人只看这段总结就能理解要点,不需要再看下面的原文。

# CQRS 架构模式

> 来源:技术评审会讨论 + 文章阅读
> 日期:2024-05-10
> 关联:[[P-订单系统重构]]

## 📝 我的总结(Layer 2)

CQRS 的本质是"读写分家":写的时候走复杂的业务逻辑,
读的时候走独立的查询优化(可以用 ES、Redis、宽表等)。

适合我们订单系统的原因:
1. 订单写入逻辑复杂(校验库存、优惠、支付),但查询简单(列表+详情)
2. 读写比约 10:1,读远多于写
3. 可以只在订单模块试点,不影响其他系统

风险提醒:
- 引入了"读写数据同步"的额外复杂度
- 团队没有 CQRS 经验,需要预留学习成本
- CTO 原话:"不要为了架构优雅引入团队驾驭不了的复杂度"

→ 结论:适合试点,不适合全推。写进方案时用"渐进式引入"的策略。

---
(以下为原始笔记内容,供查阅)
......

现在这条笔记的结构变成了:

┌─────────────────────────────────────┐
│  📝 我的总结(30秒读完,直接引用)     │  ← Layer 2
├─────────────────────────────────────┤
│  加粗关键句(1分钟扫读,快速回忆)     │  ← Layer 1
├─────────────────────────────────────┤
│  原始内容(需要时深入阅读)            │  ← Layer 0
└─────────────────────────────────────┘

它变成了一个"分层"的结构。

  • 时间紧的时候:只看 Layer 2 的总结,30 秒搞定
  • 需要回忆细节:扫一眼 Layer 1 的加粗部分,1 分钟搞定
  • 需要深入查阅:读 Layer 0 的原始内容

程序员类比:这就是缓存的三级架构。

Layer 2(我的总结)= L1 Cache(CPU 一级缓存,最快,容量最小)
Layer 1(加粗关键句)= L2 Cache(二级缓存,较快,容量中等)
Layer 0(原始内容)= 主存/磁盘(最慢,容量最大)

大多数场景下你只需要命中 L1 Cache(看总结)就够了。只有 Cache Miss 的时候才需要往下查。


Layer 3(可选进阶):提炼成"原则卡"

触发时机: 当某条笔记被我在 3 个以上不同场景中使用过时。

操作: 把核心经验抽象成一条"可跨场景复用"的原则,独立成一条新笔记,放入 Areas。

示例:从 CQRS 笔记中提炼出的原则卡

# 架构决策原则:渐进式引入

> 来源:[[CQRS架构模式]] [[微服务拆分复盘]] [[消息队列选型]]
> 领域:[[A-后端技术]]

## 原则

> 引入新架构模式时,不要全面推广,先在一个模块试点。
> 试点成功后再逐步扩展。

## 适用场景
- 团队没有该技术的实战经验
- 新技术引入会增加系统复杂度
- 业务不允许大面积重构

## 反面案例
- 我们 2023 年直接全量引入 DDD,
  结果团队理解不一致,代码风格混乱,反而更难维护

## 一句话版
> "不要为了架构优雅引入团队驾驭不了的复杂度。"—— CTO

注意这条原则卡的特点:

  1. 脱离了原始场景——它不再是"CQRS 的笔记",而是一条通用的"架构决策原则"
  2. 可跨场景复用——下次做任何技术选型时都能参考
  3. 有正面和反面案例——不是空洞的道理,是有证据支撑的经验

这就是知识从"信息"到"智慧"的跃迁。

程序员类比:Layer 0-2 是"具体实现",Layer 3 是"接口抽象"。当你把具体经验抽象成通用原则,它就可以被不同的"业务场景"调用了——就像一个 interface 可以有多个 implementation。


三、完整的三层高亮法流程图

一条笔记的提炼之旅
═══════════════════════════════════════════════

Layer 0(Capture 阶段)
┌─────────────────────────────────────┐
│ 原始内容 + 一句话批注                 │
│ 耗时:1分钟                          │
│ 状态:能搜到,但需要重新阅读才能用     │
│ 触发:Capture 时自动完成              │
└────────────────┬────────────────────┘
                 │
          第二次打开这条笔记时
                 │
                 ▼
Layer 1(加粗关键句)
┌─────────────────────────────────────┐
│ 通读一遍,加粗 3-5 个关键句          │
│ 耗时:2分钟                          │
│ 状态:扫一眼就能回忆起要点            │
│ 触发:Organize 移动时 / 偶然翻到时    │
└────────────────┬────────────────────┘
                 │
          真正要使用这条笔记时
                 │
                 ▼
Layer 2(写我的总结)
┌─────────────────────────────────────┐
│ 在笔记顶部用自己的话写核心结论        │
│ 耗时:5分钟                          │
│ 状态:30秒读完总结就能直接引用         │
│ 触发:写方案 / 写文章 / 汇报准备时    │
└────────────────┬────────────────────┘
                 │
          被3个以上不同场景复用时
                 │
                 ▼
Layer 3(提炼原则卡)[可选]
┌─────────────────────────────────────┐
│ 抽象成跨场景通用原则,独立成新笔记    │
│ 耗时:10分钟                         │
│ 状态:成为你的"个人方法论"            │
│ 触发:发现同一条经验被反复使用时       │
└─────────────────────────────────────┘

注意:
→ 不是每条笔记都要走到 Layer 3
→ 大部分笔记停留在 Layer 0 或 Layer 1 就够了
→ 只有"被反复使用"的笔记才值得深度提炼
→ 提炼是"按需触发"的,不是"批量执行"的


四、哪些笔记值得 Distill?80/20 法则

讲完了"怎么做",接下来讲一个同样重要的问题:"做不做"。

因为如果你对每条笔记都做三层提炼,你会累死。

实际数据: 在我的 107 条笔记中:

Layer
笔记数量
占比
只有 Layer 0(原始状态)
约 60 条
56%
做到 Layer 1(加粗关键句)
约 30 条
28%
做到 Layer 2(我的总结)
约 14 条
13%
做到 Layer 3(原则卡)
3 条
3%

只有 16% 的笔记被深度提炼过。但恰恰是这 16% 的笔记,贡献了我 80% 以上的"直接引用"。

这就是典型的 80/20 法则(帕累托原则)。

所以你不需要纠结"每条笔记要不要提炼"。只需要掌握一个判断标准:

当你第二次打开一条笔记时,才值得做 Layer 1。
当你要在某个交付物中引用它时,才值得做 Layer 2。
当你发现自己反复引用同一条经验时,才值得做 Layer 3。

如果一条笔记从存下来到现在你一次都没有打开过——不用提炼,让它安静地躺着就好。

程序员类比:这就是 LRU 缓存策略。不是所有数据都需要被缓存。最近被访问过的、频繁被访问的数据才放进缓存。其他的留在磁盘里,需要的时候再加载。


五、一个完整案例:20 条碎片 → 1 条原则卡

理论讲完了,来看一个从头到尾的真实案例。

背景: 在做"Q2 用户分层营销"项目的过程中,我在不同时间点 Capture 了大量碎片信息。项目做完后,我做了一次集中的 Distill,把碎片"蒸馏"成了可复用的原则。


第一阶段:散落的碎片(Layer 0)

在项目推进的 6 周里,我在不同地方存了这些笔记:

P-Q2用户分层营销/
├── RFM模型理论笔记.md         → 一篇文章的摘录
├── RFM电商案例.md              → 另一篇文章的摘录
├── 竞品用户分层调研.md          → 3个竞品的截图和链接
├── 跟产品讨论纪要0503.md       → 会议记录
├── 跟产品讨论纪要0510.md       → 又一次会议记录
├── 跟产品讨论纪要0520.md       → 又一次会议记录
├── 数据分析-用户活跃度分布.md   → SQL 查询结果和图表
├── 数据分析-付费用户特征.md     → 另一组数据分析
├── RFM指标定义讨论.md          → 跟数据团队的讨论
├── 分层方案v1.md               → 第一版方案(被否了)
├── 分层方案v2.md               → 第二版方案(通过了)
├── 分层方案v2-评审纪要.md      → 评审会议记录
├── 人群包SQL代码.md            → 实际跑数的 SQL
├── 投放素材A版.md              → 营销素材记录
├── 投放素材B版.md              → 营销素材记录
├── ABTest结果0601.md           → 第一轮测试结果
├── ABTest结果0615.md           → 第二轮测试结果
├── ROI数据汇总.md              → 最终效果数据
├── 老板反馈记录.md             → 汇报后的反馈
└── 项目复盘会纪要.md           → 复盘会议记录

共 20 条笔记

这 20 条笔记记录了一个项目的完整过程。但如果你让我回答"下次做用户分层应该怎么做",我需要把这 20 条全翻一遍才能拼凑出答案。


第二阶段:选择性提炼(Layer 1 + Layer 2)

项目结束后,我花了一个小时对这 20 条笔记做了一次"选择性提炼"。

不是每条都提炼。我只对"未来可能被复用的"笔记做处理:

笔记
处理方式
理由
RFM 模型理论笔记
Layer 2:写了我的总结
理论基础,下次还会用
竞品用户分层调研
Layer 1:加粗了关键发现
竞品信息会过时,不值得深度提炼
3 次产品讨论纪要
合并为 1 条,提取决策记录
讨论过程不重要,决策才重要
分层方案 v1(被否)
不提炼,原样保留
失败的方案也是参考
分层方案 v2(通过)
Layer 2:写了方案摘要
核心交付物,一定会被复用
ABTest 结果
合并为 1 条,写总结
结论比过程数据更重要
ROI 数据汇总
Layer 1:加粗核心数据
述职要用
项目复盘会纪要
Layer 2:提炼关键教训
复盘经验最有长期价值
其他(SQL、素材等)
不提炼,直接归档
技术细节,用的时候再看

20 条笔记中,我只对 7 条做了提炼。其余 13 条保持原样直接进入 Archives。


第三阶段:蒸馏为原则卡(Layer 3)

在提炼的过程中,我发现了 3 条"跨项目可复用"的经验。我把它们独立成了原则卡,放入 Areas。

原则卡 1:用户分层的"指标适配"原则

# 原则:用户分层模型必须做"指标适配"

> 来源:[[P-Q2用户分层营销/复盘]]
> 领域:[[A-数据与增长]]
> 被验证次数:1(首次总结,待后续验证)

## 原则内容

> 经典模型(如 RFM)不能直接照搬,
> 必须根据自身业务特征替换指标定义。

## 我们的适配方案
| RFM 原始指标 | 电商定义 | 我们的定义(SaaS) | 替换原因 |
|---|---|---|---|
| R(最近交易时间) | 最近一次购买 | 最近一次登录 | 我们不是交易型产品 |
| F(交易频率) | 购买次数 | 核心功能使用频次 | 使用深度比购买次数更能反映活跃度 |
| M(交易金额) | 消费总额 | 当前订阅套餐金额 | SaaS 是订阅制,不是单次消费 |

## 教训
- v1 方案失败就是因为直接套用了电商的 RFM 定义
- v2 成功是因为跟产品+数据一起重新定义了每个指标的业务含义

## 一句话版
> 别抄别人的指标,先问自己:这个指标在我的业务里代表什么?

原则卡 2:AB测试的"先跑小样本"原则

# 原则:AB测试先用 5% 流量跑 3 天

> 来源:[[P-Q2用户分层营销/ABTest总结]]
> 领域:[[A-数据与增长]]

## 原则内容

> 不要一上来就 50/50 分流。先用 5% 流量跑 3 天:
> ① 验证埋点数据是否正常
> ② 观察是否有严重负面效果
> ③ 确认样本量预估是否合理
> 通过后再放大到 50/50。

## 来源经验
- 第一轮 ABTest 我们直接 50/50,结果发现埋点有 Bug,
  3天的数据全部作废,浪费了一周时间
- 第二轮先跑了 5% 小样本,提前发现了推送文案的一个歧义,
  及时修改后再放量,数据干净很多

## 一句话版
> AB测试的前3天是"验证实验本身",不是"验证假设"。

原则卡 3:跨团队项目的"术语对齐"原则

# 原则:跨团队项目第一周先做"术语对齐"

> 来源:[[P-Q2用户分层营销/复盘]] [[P-订单系统重构/复盘]]
> 领域:[[A-产品思维]]
> 被验证次数:2

## 原则内容

> 跨团队协作的第一步不是排期,是让所有人对核心概念的定义达成一致。

## 案例
- 用户分层项目中,产品说的"活跃用户"是"30天内登录过",
  数据团队理解的是"7天内有操作行为",运营理解的是"参与过活动"。
  前两周大家各做各的,最后发现数据对不上。
- 订单重构项目中同样遇到过:
  "订单"在交易、物流、财务三个团队的含义完全不同。

## 落地方法
- 项目启动第一周,输出一份"术语表"文档
- 包含:术语名称 / 定义 / 计算口径 / 负责团队
- 所有人签字确认后再开始排期

## 一句话版
> 80%的跨团队扯皮,源于大家在用同一个词说不同的事。


蒸馏前后对比

Before(20条散落的笔记):
┌──────────────────────────────────────┐
│ 📄📄📄📄📄📄📄📄📄📄               │
│ 📄📄📄📄📄📄📄📄📄📄               │
│                                      │
│ 总计 20 条                            │
│ 阅读时间:全部读完需要 2-3 小时         │
│ 能直接引用的:0 条                     │
│ 能跨项目复用的:0 条                   │
└──────────────────────────────────────┘

After(结构化分层后):
┌──────────────────────────────────────┐
│ 🏆 3 条原则卡(Layer 3,30秒可引用)   │
│ 📋 7 条深度提炼笔记(Layer 2,1分钟)  │
│ 📄 13 条原始笔记(Layer 0,归档)      │
│                                      │
│ 提炼耗时:约 1 小时                    │
│ 未来每次复用节省:1-2 小时              │
│ 3 条原则卡的预期复用寿命:1-3 年        │
└──────────────────────────────────────┘

1 小时的提炼投入,产出了 3 条可以用 1-3 年的原则卡。这就是 Distill 的 ROI。


六、我在实践中总结的 5 条 Distill 规则


规则 1:不要批量提炼,按需触发

❌ 错误做法:专门拿出一个下午"把所有笔记都提炼一遍"
✅ 正确做法:在使用某条笔记时,顺手多花2-5分钟做提炼

为什么?
→ 提炼的质量取决于"你当下的理解深度"
→ 如果你没有在用这条笔记,你提炼不出有价值的总结
→ 只有在"被使用"的上下文中,你才知道哪些是真正的关键信息

程序员类比:不要在没有需求的时候重构代码。重构的最佳时机是你正在修改那段代码的时候——你对上下文最了解、修改成本最低。


规则 2:用自己的话写,不要复制原文

❌ "CQRS 是 Command Query Responsibility Segregation 的缩写,
    它将应用程序分为命令端和查询端……"(复制粘贴)

✅ "CQRS 说白了就是读写分家。写的时候走复杂的业务逻辑链,
    读的时候用独立的优化方案(ES/缓存/宽表)。
    我们订单系统读写比 10:1,很适合。"(自己的话)

区别:
→ 前者是"搬运",三个月后你读到它跟读陌生人的文章没区别
→ 后者是"内化",三个月后你读到它能瞬间回忆起当时的思考脉络


规则 3:总结要面向"未来的自己"写

写总结时,想象三个月后的你打开这条笔记。
他忘了所有细节,只有 30 秒时间快速获取关键信息。

问自己:
- 他最需要知道什么?
- 他可能在什么场景下打开这条笔记?
- 怎么写才能让他30秒内获得足够的信息去做下一步行动?

好的总结 = 给未来的自己写的"备忘录"

实际对比:

❌ 模糊的总结:"CQRS 有优缺点,适合某些场景。"
→ 三个月后的你:所以到底适不适合我们?优缺点是什么?还是得重新看原文……

✅ 具体的总结:"CQRS 适合我们订单系统。原因:读写比10:1,写入复杂但查询简单。
   风险:团队没经验。策略:先在订单模块试点。CTO已同意。"
→ 三个月后的你:秒懂。直接引用。


规则 4:一条笔记只说一件事

不要在一条笔记里塞太多内容。

❌ "CQRS+DDD+事件驱动+微服务拆分策略+团队管理思考"
   → 这不是一条笔记,这是一本书

✅ 一条笔记 = 一个概念 / 一条经验 / 一个决策 / 一个案例

如果一条笔记超过了 500 字还在讲不同的主题,
考虑拆成多条。

好处:
→ 颗粒度越细,越容易被搜索命中
→ 颗粒度越细,越容易跟其他笔记建立链接
→ 颗粒度越细,越容易在不同项目中被复用

程序员类比:单一职责原则(SRP)。一个类只做一件事,一个函数只完成一个功能,一条笔记只说一个观点。


规则 5:用"双向链接"连接相关笔记

这是 Obsidian 最强大的功能之一,也是 Distill 阶段最值得花时间的动作。

操作:在写总结的时候,遇到跟其他笔记相关的内容,
用 [[]] 语法建立链接。

示例:
在 CQRS 笔记的总结里写:
"CTO 说的这句话跟 [[架构决策原则:渐进式引入]] 是一致的"
"这个读写分离的思路跟 [[Redis 缓存策略]] 有关联"

好处:
1. 笔记之间形成网络,而不是孤岛
2. 在 Obsidian 的"关系图谱"里能看到知识的连接
3. 未来搜索一条笔记时,能顺藤摸瓜找到相关笔记

双向链接的最大价值不是"整理时建的那一刻",而是"三个月后搜索时发现原来这两个概念是相关的"。

程序员类比:双向链接 = 数据库的外键关联。有了外键,你可以做 JOIN 查询,从一张表跳到另一张表。没有外键,每张表都是孤岛,只能一张张翻。