用AI解决SQL语句解析及语法转换问题

以前读写SQL都会先搜索关键词相关语法,然后再逐句解析,就像拿着字典搞翻译。

现在遇到SQL语句,有个词记不清啥意思了,会把整条丢给豆包,让豆包给解析。

像这种类似1+1=2的问题,豆包解析的准确率还是蛮高的。

毕竟它再一本正经胡说八道,也不能把1+1说成=3吧?!

下面是一个解析结果:

一、原 SQL 语句解析

这是一条查询去重数据并生成连续行号的 SQL,核心功能拆解:

1、SELECT DISTINCT:对最终查询结果去重,排除完全重复的行;

2、ROW_NUMBER() OVER(order by "c_WhsDesc" asc):窗口函数,按c_WhsDesc升序为每一行生成连续不重复的行号,别名rowNumber;

3、查询字段:返回行号、仓库描述c_WhsDesc、托盘类型c_PalletType;

4、数据源:从表AA_RawMaterialM中查询;

5、最终排序:整体结果按c_WhsDesc升序排列。

二、PostgreSQL(PG)兼容版 SQL

原语句语法本身和 PG 高度兼容 ,仅需优化窗口函数与 DISTINCT 的执行顺序(PG 中直接混用会导致行号错乱),这是最关键的适配点:

sql 复制代码
-- PostgreSQL 标准语法(推荐,结果准确、性能最优)

SELECT

      ROW_NUMBER() OVER(ORDER BY t."c_WhsDesc" ASC) AS "rowNumber",    t."c_WhsDesc",

    t."c_PalletType"

FROM (   

-- 内层先做去重+排序,保证数据纯净

    SELECT DISTINCT "c_WhsDesc", "c_PalletType"

    FROM "AA_RawMaterialM"

    ORDER BY "c_WhsDesc" ASC

) t;

三、关键适配说明(PG vs 原 SQL)

1、核心问题

原 SQL 直接把ROW_NUMBER()和DISTINCT写在同一层,MySQL/Oracle 可执行,但PG 会先生成行号再去重,导致行号不连续、错乱;

优化方案:内层先去重排序,外层再生成行号,这是 PG 的标准最佳实践。

2、兼容点

双引号"字段名":PG 支持双引号标识字段 / 表名(区分大小写);

ROW_NUMBER()窗口函数:PG 原生支持;

DISTINCT/ORDER BY:语法完全通用。

3、简化版

如果你追求简洁,也可以用这个写法(逻辑和上面一致):

sql 复制代码
SELECT DISTINCT

    ROW_NUMBER() OVER(ORDER BY "c_WhsDesc" ASC) AS "rowNumber",    "c_WhsDesc",

    "c_PalletType"

FROM "AA_RawMaterialM"

ORDER BY "c_WhsDesc" ASC;

四、总结

1、原 SQL 功能:去重查询原料表数据,并生成连续行号;

2、PG 适配核心:先去重,后生成行号,避免行号异常;

3、推荐使用分层写法,兼容性、准确性、性能都最优。

其实上面问的时候问错了,本来想让其将PG语法修改为MySQL数据库的语法,结果要求成改为PG库了,问题是原语句本就是PG语法的SQL。

于是又让其重新改一遍,助理态度特别好,一点脾气都没有,分分钟给出改好的结果。

但修改完运行报错,于是将报错信息直接丢给豆包,质问他,你刚才生成的SQL语句报这个错,于是他又给出报错原因,及修改办法,非常好用。

相关推荐
茶栀(*´I`*)14 分钟前
SQL 性能分析:从慢查询日志到执行计划的完整定位方法
数据库·sql
艺杯羹44 分钟前
1Panel 装好后 ufw 仍是 inactive:一次服务器安全盲区复盘
服务器·数据库·安全·网络安全·系统架构·实战·1panel
code2cat2 小时前
【随笔】MCP工具重试:任务已经创建,响应丢了怎么办
数据库·mcp
wuyk5553 小时前
Spider-第10讲-SQLite持久化与去重
数据库·爬虫·sqlite
乌暮5 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
小此方6 小时前
Re:Mysql数据库基础篇(十二):什么是事务、事务解决了什么问题、事务的四大属性、事务的操作方式
数据库·mysql
flash俊杰7 小时前
v0.5-01 让桌面 AI 助手记得住:预算组装、递归摘要、长期记忆与评估基线
数据库·安全·架构
2501_933923257 小时前
redis:string类型常见命令
数据库·redis·缓存
byte轻骑兵8 小时前
时序数据库选型指南:Apache IoTDB 社区版实践与踩坑
数据库·人工智能·apache·时序数据库·iotdb
黄连木笛9 小时前
Redis Insight 汉化教程:Windows / macOS / Linux 设置中文界面(附繁體、教程汉化、关闭自动更新)
数据库·redis·缓存