第 05 章过滤器
过滤器只影响看什么,不改动任何数据。分成两种:行过滤器决定显示哪些行, 列过滤器决定显示哪些列。
行过滤器
按 ⌘F 打开。面板出现在数据网格上方的一条横条里,不遮挡数据。
| # | 控件 | 作用 |
|---|---|---|
| 1 | 勾选框 | 决定这一条是否参与过滤。取消勾选可以临时停用某个条件而不删掉它——对比不同的筛选范围时很好用。 |
| 2 | 列下拉 | 列出当前表的所有列。列很多的时候下拉里带搜索框。选中的列会带上它的类型信息,避免选错同名列。 |
| 3 | 操作符下拉 | 14 种操作符,见下一节。选中不需要值的操作符(比如「为空」)时,右边的值输入框会自动禁用。 |
| 4 | 值输入框 | 填比较值。「在区间内」需要两个值;「在列表中」用逗号分隔多个值。ENUM / SET / 布尔列会变成下拉,不用手输。 |
| 5 | + / − | 添加一行(⌘I)、删除这一行(⇧⌘I)。 |
| 6 | 组合方式 | 全部满足(AND)或满足任一(OR),二选一,作用于所有勾选中的条件。不支持混用,也不支持嵌套括号。 |
| 7 | 高级 / 直接写条件 | 切换到直接手写过滤条件的模式,例如 id IN (1, 2, 3) AND status <> 'deleted'。切过去会提示「高级条件不会被校验,请自行确认语法正确」。 |
| 8 | 重置 / 应用 | 重置清空所有条件并重新加载。应用按当前条件从第 1 页重新加载。 |
| 9 | 错误提示条 | 应用失败时(比如引用了不存在的列)在面板顶部指出是哪一条错了。面板保持打开,方便直接改。 |
按 Esc 关闭面板。条件会保留,只是隐藏起来。
14 种操作符
高级模式:直接写条件
点「高级 / 直接写条件」,可以完全自己写过滤条件。条件行的模式与它互斥,切过去会清空另一侧。
WHERE 后面,不做引号包裹。列过滤器
按 ⌥⌘F 打开一个浮层,控制显示哪些列。
列显隐只是显示行为
隐藏一列不会减少查询的列数,被隐藏的列照样会被读出来——因为提交修改时可能需要用到它们。
真正想少读数据,用「复制列名」自己写 SELECT。
至少要保持一列可见,否则「应用」按钮是灰的并给出提示。
列显隐只影响数据网格。右侧字段栏照样会把这一行的全部字段列出来——包括被隐藏的那些。
快速过滤
大多数时候你不必先打开过滤器面板再填条件。几种一步到位的做法:
| 操作 | 效果 |
|---|---|
右键列头 → 按此列筛选 | 新增一条「列 = 该列」的等于条件,值留空并聚焦,等你填写 |
右键单元格 → 按此值筛选 | 新增一条「列 = 该列」且值等于该单元格内容的条件,立即应用 |
右键单元格 → 排除此值 | 同上,操作符是「不等于」 |
| 外键单元格点 ↗ | 在新标签打开被引用表,并自动加上「主键 = 该值」的条件 |
| ENUM / SET / 布尔列 | 过滤器的值输入框变成下拉选项 |
过滤器会被记住
每张表最后一次用过的过滤条件会被记住,下次打开这张表时自动恢复。 不喜欢这个行为可以在偏好里关掉(见第 11 章)。
过滤器与其他操作的相互影响
| 操作 | 行为 |
|---|---|
| 应用 / 重置过滤器 | 回到第 1 页重新加载 |
| 有未提交改动时改过滤器 | 允许,但先提示「切换过滤条件会重新加载数据,你的修改会保留在暂存区」 |
| 有未提交改动时改排序 | 同上 |
| 过滤器生效时提交 | 提交成功后按当前过滤条件重新加载。被过滤掉的改动行虽然提交成功了,但不会出现在结果里 |
| 过滤条件引用了不存在的列 | 应用时在面板顶部报错,并指出是哪一条 |
| 导出一张被过滤的表 | 导出的是当前过滤条件下的数据,导出面板里会明确写出这一点 |
已知限制
不能嵌套括号
- 不支持
(A AND B) OR C这种嵌套分组 - 所有条件只能是 AND 或 OR 中的一种,不能混用
- 高级模式不做语法校验,写错了会把错误直接抛给数据库
需要复杂条件时,用高级模式手写,或者干脆用查询编辑器写一条完整的
SELECT。查询结果同样可以排序、复制、导出。