Files
2026Technology-Competition/data/demo-sqlfluff/reports/01_aliasing-review.md
T
范智鹏 c92249a044 docs: 归档 demo 工程样例与插件实测报告
- 新增三个 demo 工程(demo-eslint / demo-sqlfluff / demo-stylelint):各含 src/ 样例代码与覆盖率映射(run-coverage.mjs、coverage_map.json、stylelint_line_map.json)

- 归档各 demo 的插件实测导出报告(reports/):

  - demo-eslint:common.js / esm-demo.js / legacysyntax.cjs / typescript.ts 审查报告 + 覆盖率报告(292/292 条零偏差,126 种规则全覆盖)

  - demo-sqlfluff:11 个 SQL 样例审查报告 + 覆盖率报告(113/113 条零偏差,57 种规则全覆盖,含 JJ01 行号缺陷修复后的复测验证)

  - demo-stylelint:common.css / empty-source.css 审查报告 + 覆盖率报告(145/145 条零偏差,68 种规则全覆盖)
2026-08-25 22:00:19 +08:00

56 lines
3.4 KiB
Markdown

# 代码审查报告
**文件:** `data\demo-sqlfluff\src\01_aliasing.sql`
**语言:** sql
**耗时:** 102.5s
**分析工具:** sqlfluff
---
总计: 12 | 错误: 10 | 警告: 1 | 建议: 1
静态分析 · 9 个问题
- 🔴 `sqlfluff:AL02` L5
第 5 行:列别名使用隐式/显式混用的别名形式。
建议: 请为列别名显式添加 AS 关键字,例如将 `col1 col1_alias` 改为 `col1 AS col1_alias`
- 🔴 `sqlfluff:AM05` L20
第 20 行:JOIN 子句应使用完全限定的列引用。
建议: 为每个表使用唯一别名,并确保 ON 条件中的列都以该表别名限定;例如 `ON t1.id = t2.ref_id`,而不是 `other_table.ref_id`
- 🔴 `sqlfluff:AL04` L21
第 21 行:表别名 't1' 重复使用。表别名应保持唯一。
建议: 将第二张表 other_table 的别名改为唯一别名(如 t2),并同步修改 ON 条件中的引用为 `t1.id = t2.ref_id`
- 🔴 `sqlfluff:LT02` L21
第 21 行:'ON' 前应换行且不应有缩进。
建议: 将 ON 放到新的行,并不加额外缩进:`other_table AS t1\nON t1.id = other_table.ref_id;`
- 🔴 `sqlfluff:AL05` L27
第 27 行:表别名 'unused_alias' 在 SELECT 语句中从未使用。
建议: 移除未使用的表别名,直接使用表名;或若该别名有意义,在查询中引用它。
- 🔴 `sqlfluff:AL08` L32
第 32 行:列别名 'shared_alias' 与第 31 行的别名重复。
建议: 为这两列设置不同的别名,例如将第 32 行的 `name AS shared_alias` 改为 `name AS name_alias`
- 🔴 `sqlfluff:AL09` L38
第 38 行:列不应使用与列名相同的别名(自别名)。
建议: 移除 `AS id`,直接写 `id`;或改成一个有意义的别名如 `id_alias`
- 🔴 `sqlfluff:AL10` L46
第 46 行:派生表必须指定别名。
建议: 为子查询添加表别名,例如 `(SELECT COUNT(*) AS cnt FROM my_table) AS cnt_table`
- 🔴 `sqlfluff:LT12` L47
第 47 行:文件必须以单个尾随换行符结束。
建议: 在文件末尾添加一个换行符,并确保没有多余的空行或行尾空格。
AI 审查 · 3 条建议
- 🔴 [AI] [bug] `invalid-alias-original-table-reference` L21
**ON 条件中混用原始表名与别名**
第 21 行中,`other_table AS t1` 为表设置了别名,但随后 ON 子句使用 `other_table.ref_id` 引用该表。大多数 SQL 方言中,一旦表指定别名,就必须用别名限定列,不能再用原始表名;且该查询还存在重复别名 t1,导致 `t1.id` 指代不明。
建议: 为 other_table 使用唯一别名(如 t2),并将 ON 条件改为 `t1.id = t2.ref_id`,同时保持两个表别名唯一。
- 🟡 [AI] [performance] `redundant-derived-table` L46
**不必要的外层查询嵌套**
第 43-46 行 `SELECT cnt FROM (SELECT COUNT(*) AS cnt FROM my_table)` 先用子查询计算 COUNT(*),再由外层选择 cnt;这层封装没有实际作用,反而让 SQL 更难阅读且可能妨碍优化器简化执行计划。
建议: 直接写成 `SELECT COUNT(*) AS cnt FROM my_table;`,既避免派生表别名问题,也减少不必要的嵌套。
- 🔵 [AI] [style] `missing-column-alias` L11
**聚合列缺少别名**
第 11 行 `SUM(amount)` 没有显式别名,返回列名会依赖具体数据库的默认命名规则,不利于后续代码维护与结果集访问。
建议: 为聚合表达式添加有意义且稳定的别名,例如 `SUM(amount) AS total_amount`