首次接触SQL嵌套语句

 

  终于要用到SQL嵌套语句了,虽然不用嵌套语句也可以有其他解决方案,但既然碰到了就研究一下。遇到的问题是这样,有两个表A,B,要求把A和B里面的每一条记录都读出来,而B表的每条记录都通过外键AId与A表里的记录建立唯一对应关系,但是B表里面的数据只是一个附加信息,所以B表的记录要比A表少的多~我只要在B表里提取两个字段M和N的信息~但由于B表的记录数并不和A表的记录数相等,所以不能用简单的select A.*,B.M,B.N from A,B where A.AId=B.AId来查询了。因为这样的话,如果B表是空的话,就会查询出0条记录~这是不符合需求的.....

 

  在这种情况下,我想到了SQL语句的嵌套,就尝试用一下了。其实SQL语句的嵌套就像是程序语言里的循环嵌套,这样子想就尝试写出了第一条嵌套SQL语句:select *,(select M from B where B.AId=A.AId) as  M from A;这样的结构就是每次在A表得出一条记录后,再用AId作为条件在B表查询一次,把得出的结果M作为字段M返给父查询。这样的嵌套只适合子查询只返回一个值的情况,也就像是上面所说的A表与B表的那种唯一对应关系。不过这条语句的子查询只返回一个字段M,这还不能满足需要的,但在这种情况下子查询也只能返回一个字

段...

 

    我用select *,(select concat(M,N) as mn from B where B.AId=A.AId) as MN from A;这样子字段MN得出是空值的,想不通~没办法了,只好这样子:select *,(select M from B where B.AId=A.AId) as M,(select N from B where B.AId=A.AId) as N from A;这样就没问题了~可以满足需要了~

 

  不过这条语句虽然不是三层嵌套,但每次在A表中查询出一条记录就要在B表中查询两次,这样的语句感觉还是不够优化,但现在也想不到应该怎么去优化这条语句~要继续研究了~

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值