要让DeepSeek生成可直接执行的MySQL SQL语句,必须严格提供表结构、外键关系、三段式任务指令、数据库方言及示例,并规避时间函数、字段别名和GROUP BY三大陷阱。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要用DeepSeek生成一条能直接在MySQL里执行、不报错、结果也对的SQL语句,你得把表结构、字段含义、外键怎么连、时间怎么写、甚至用哪个数据库都提前说死——它不会猜,也不会查你的库,少一个关键信息就可能返回Unknown column 'create_time'这种错误。
第一步:把表结构和外键关系原样贴进去
在提问最开头,用代码块格式粘贴 CREATE TABLE 语句,必须包含主键、字段类型、NOT NULL 约束。例如:
```sql
CREATE TABLE users (id BIGINT PRIMARY KEY, name VARCHAR(50) NOT NULL, phone VARCHAR(20), city VARCHAR(30), reg_time DATETIME);
CREATE TABLE orders (order_id BIGINT PRIMARY KEY, user_id BIGINT NOT NULL, amount DECIMAL(10,2), order_time DATETIME NOT NULL);
```
紧接着另起一行,明确写出外键路径:【orders.user_id → users.id】。这一步漏掉,DeepSeek 可能默认用 orders.id = users.id 去 JOIN,一执行就查不到数据。
别写“用户表和订单表有关联”这种模糊描述——它不知道谁引用谁,也不知道是一对多还是多对一。
第二步:用三段式指令把需求钉死
把自然语言请求拆成【任务】【输入约束】【输出要求】三块,中间空一行,顺序不能乱。
【任务】
检索2024年5月下单总金额超过5000元的北京用户姓名、手机号、订单笔数、平均订单金额
【输入约束】
仅使用 users 和 orders 表;时间范围以 orders.order_time 为准;用户地区由 users.city 字段判断;订单金额单位为元,保留两位小数
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
【输出要求】
只输出一条可执行 SELECT 语句;不带任何解释、不加 ```sql 标记、不换行;所有字段名用表别名前缀(如 u.name),禁止裸写 name 或 id
注意:如果没写“不加 ```sql 标记”,DeepSeek 大概率返回带代码块包裹的 SQL,复制进 Navicat 就会报语法错误。
第三步:指定数据库方言并嵌入示例
方法一:在提示词开头直接声明
“请生成适用于 MySQL 8.0 的标准 SQL,使用 DATE_FORMAT(order_time, '%Y-%m') 提取年月,分页用 LIMIT 20 OFFSET 0”
方法二:插入一个少样本示例(推荐用于复杂聚合或 JOIN 场景)
输入:“查询上海用户的订单总数和总消费额”
输出:SELECT u.name, COUNT(o.order_id) AS order_count, COALESCE(SUM(o.amount), 0) AS total_amount FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.city = '上海' GROUP BY u.id, u.name;
这个示例必须真实可用,字段名、表别名、函数写法都要和你要生成的 SQL 保持一致。DeepSeek 会按这个风格继续生成,而不是自己发挥。
第四步:检查三个致命陷阱
① 时间写法是否匹配方言:
MySQL 用 DATE_FORMAT(order_time, '%Y-%m'),PostgreSQL 用 TO_CHAR(order_time, 'YYYY-MM'),SQL Server 用 FORMAT(order_time, 'yyyy-MM')。混用必报错。
② 字段歧义是否消除:
users.id 和 orders.id 都存在时,必须写成 u.id 和 o.id,不能只写 id —— DeepSeek 有时会漏加别名,导致 MySQL 8.0+ 报错 “Column 'id' in field list is ambiguous”。
③ GROUP BY 是否完整:
SELECT 后出现的非聚合字段(如 u.name、u.phone),必须全部出现在 GROUP BY 子句中。DeepSeek 偶尔会漏掉 u.phone,执行时报错 “Expression #3 of SELECT list is not in GROUP BY clause”。


















