SQL 常见报错汇总

SQL 常见报错汇总

22007:日期时间值的字符串表示法的语法不正确
解决方案:
DATA类型不能填空,例如‘’。可以用null或者对应日期

23505:INSERT 语句、UPDATE 语句或由 DELETE 语句导致的外键更新中的一个或多个值无效,因为由 “1” 标识的主键、唯一约束或者唯一索引将表 ****的索引键限制为不能具有重复值
解决方案:
该问题是违反了表的主键的唯一性引起,修改方式:改成update语句即可

42704:‘表名’是一个未定义的名称
解决方案:
1.平时查表时遇到的话,就是需要加个对应的前缀。
2.存储过程中遇到,是要查对应的表名,不是存储过程名,是tables and views下的表名

42723:例程‘存储过程名’的定义中提供的特征符与另外某个例程的特征符相匹配
解决方案:
说明这个存储过程已经有了,在开头的create后面加个替换关键词:or replace

42802:赋值数目与指定的或隐含的列数或变量数不一样
解决方案:
俩张表列数不同

### 解决SQL错误 'not a single-group group function' 在处理SQL查询中的`GROUP BY`语句时,如果遇到‘不是单组分组函数’的错误提示,这通常是因为违反了 `ONLY_FULL_GROUP_BY` 模式的约束条件。自MySQL 5.7.5起,默认SQL模式包含了此设置[^1]。 为了修正这个问题,在编写带有聚合操作(如SUM(), COUNT()等)以及`GROUP BY`子句的SELECT语句时,所有非聚集列都应当出现在`GROUP BY`列表里;或者使用特定于行的选择方法来指定如何挑选每组内的代表值。以下是两种常见的解决方案: #### 方法一:确保所有非聚合字段都在 GROUP BY 中 ```sql -- 假设有一个表 sales 记录销售数据 SELECT product_id, SUM(sales_amount), region FROM sales GROUP BY product_id, region; ``` 这种方法通过将所有的非聚合字段加入到`GROUP BY`后面,使得每一组都有唯一的组合键,从而满足`ONLY_FULL_GROUP_BY`的要求。 #### 方法二:应用窗口函数或聚合表达式 对于某些场景下无法简单地把更多字段加进`GROUP BY`的情况,则可以考虑采用窗口函数或其他形式的聚合表达式来进行更灵活的数据汇总计算: ```sql -- 使用窗口函数获取每个产品类别下的最高销售额记录 WITH ranked_sales AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category ORDER BY sale_date DESC) as rn FROM sales ) SELECT * FROM ranked_sales WHERE rn = 1; ``` 上述例子展示了利用窗口函数ROW_NUMBER()实现按分类选取最新一条记录的效果,而不需要改变原有的`GROUP BY`逻辑结构。 #### 关闭 ONLY_FULL_GROUP_BY 设置(不推荐) 虽然可以通过修改服务器配置关闭`ONLY_FULL_GROUP_BY`选项以允许更加宽松的行为,但这并不是最佳实践,因为这样做可能会导致不确定的结果集,并且违背标准SQL规范。因此建议优先尝试前两种方式解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值