db2数据库_SQLCODE=-203, SQLSTATE=42702, DRIVER=4.22.29_原因分析及解决方案

2 篇文章 0 订阅
2 篇文章 0 订阅

 问题如下:


当多个表关联查询的时,两个表都有相同字段时,如果要获取该字段,必须表明该字段来自哪张表,否则报错,列模糊。

如Student表(学生表)和Teacher表(老师表),表中都有id这个字段,为主键,自增。当两个表关联获取一个老师下的学生(学生表中t_id为老师表中的id)时候。查询代码如下
 

SELECT ID
FROM STUDENT a INNER JOIN TEACHER b
ON a.t_id = b.id

因为学生表和老师表中都有id字段。然而sql文中并没有标注查询的ID来自哪个表,所以报错

 

解决方案:

标注来源表即可

SELECT b.ID,b.name,a.id,a.name
FROM STUDENT a INNER JOIN TEACHER b
ON a.t_id = b.id

补充:

一般两个表关联这种问题不会犯,当多个表和某个表中还有子查询的时候,往往会犯这种较为低级的错误。

SELECT b.*,a.id,a.name
FROM STUDENT a INNER JOIN TEACHER b
ON a.t_id = b.id

 上面的sql文没有错误,查询出教师和学生的id,如果在该sql文上再次嵌套一层的话,那么很容易犯错

 我们假设在上面sql文的基础上再和学校资源表进行(sch_scourse )关联,获取该学校中老师所拥有的学校资源有哪些,(其实这里不需要教师表和学生表关联,多此一举,为了复现错误,理解一下。)

select a.id,a.name,b.name
from (
SELECT b.*,a.id,a.name
FROM STUDENT a INNER JOIN TEACHER b
ON a.t_id = b.id
) a INNER JOIN sch_scourse b
on a.id = b.own_id

 当我们再次执行上面的sql文时,就会报错SQLCODE=-203,还是同样的错误,乍一看没有问题,最外层只有别名为a,b的表,没有问题,再执行子查询中的sql文(第一个from中的查询,可以正常返回结果,没有问题,那么问题出在哪里呢)

原因在这里:子查询中教师表有id字段(虽然查询的是b.*,学生表有id字段),当最外层查询使用a.id进行查询的时候,数据库不知道你是想查询b.*还是a.*了,所以报错

解决:在子查询中对其中一个id 赋一个别名即可

解决后sql如下:

select a.id,a.name,b.name
from (
SELECT b.*,a.id as student_id,a.name
FROM STUDENT a INNER JOIN TEACHER b
ON a.t_id = b.id
) a INNER JOIN sch_scourse b
on a.id = b.own_id

问题解决。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值