Every derived table must have its own alias(sql语句错误解决方法)

1. 在做多表查询,或者查询的时候产生新的表的时候会出现这个错误:Every derived table must have its own alias(每一个派生出来的表都必须有一个自己的别名)。

eg:


delete from stock   
where (org_id,material_id,state) 
in  (SELECT * from 
(select org_id,material_id, state from stock WHERE state = 1 group by org_id,material_id,state having count(*) > 1)
) 

当执行这条sql语句的时候就会出现Every derived table must have its own alias;

2. 这条sql:

(select org_id,material_id, state from stock WHERE state = 1 group by org_id,material_id,state having count(*) > 1)

就会产生一张新的表,和前面的表stock联合查询,但是mysql要求每一个派生出来的表都必须有一个自己的别名,那我给派生表加上别名即可;

eg:修改后的sql,直接在新生产的表中加入 他的别命名就行(“as a”或者“a”),“a”为新表的别名


delete from stock   
where (org_id,material_id,state) in  
(SELECT * from (select org_id,material_id, state 
from stock WHERE state = 1 group by org_id,material_id,state having count(*) > 1) as a ) 

这样就解决了问题;

### PageHelper 分页插件报错解决方案 当使用 `PageHelper` 进行分页查询时遇到 `'Every derived table must have its own alias'` 错误,通常是因为 SQL 查询语句中的子查询未给派生表指定别名所致[^4]。 对于此问题,在确保常规SQL查询部分已经正确设置了别名的情况下,仍出现问题可能是由于 `PageHelper` 插入的额外逻辑影响了原有SQL结构。具体来说,某些情况下 `PageHelper` 可能在内部创建临时表或执行子查询而忘记为其分配唯一别名[^5]。 为了修正这个问题,建议采取如下措施: 1. **检查并调整原始SQL** 审查用于分页操作的基础SQL语句,确认所有涉及的子查询都已经赋予了合适的别名。即使看似合理的SQL也可能因为框架处理方式不同而导致意外情况发生。 2. **更新依赖版本** 如果正在使用的 `PageHelper` 版本较旧,则考虑升级到最新稳定版。开发者社区经常会对已知bug进行修复,并优化与其他组件之间的兼容性。 3. **自定义拦截器配置** 部分场景下可以通过修改 `PageHelper` 的默认行为来规避此类错误。例如通过实现自定义拦截器的方式重写分页逻辑,从而更好地控制最终生成的实际SQL形式。 4. **尝试其他替代方案** 当上述方法均无法解决问题时,不妨探索一下是否有更合适的数据访问层工具能够满足需求而不引发相同类型的异常。比如 MyBatis-Plus 提供了更为简洁易用的分页支持功能。 ```java // 示例代码展示如何为子查询设置别名 String sql = "SELECT * FROM ( SELECT t.* , ROW_NUMBER() OVER () AS row_num FROM user_info t ) temp WHERE row_num BETWEEN #{start} AND #{end}"; ```
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值