用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语句报这个错,于是他又给出报错原因,及修改办法,非常好用。

相关推荐
晓子文集2 分钟前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
三言老师31 分钟前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
旺仔学长 哈哈1 小时前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
ClickHouseDB1 小时前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
数智化管理手记2 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
吴声子夜歌2 小时前
MongoDB 4.2——选择片键
数据库·mongodb
天天进步一点点3 小时前
QSqlQuery删除sqlite数据库执行drop数据表报错database table is locked unable to fetch row问题
数据库·oracle·sqlite
音视频工程实战3 小时前
PromptQL 新手入门与实战指南
数据库·sql·算法
清川渡水3 小时前
NL2SQL 的正确打开方式:从「AI 猜 SQL」到「置信度闭环」的工程化落地
数据库·人工智能·sql
TDengine (老段)3 小时前
TDengine Go 与 Rust 连接器 — 高性能异步访问
大数据·数据库·物联网·golang·rust·时序数据库·tdengine