sql里面leftjoin多表的问题记录

1.做关联时候, on里面只写两个表能够有外键关系的字段,有多个字段则用and连接一起写上, 如果少一个,则会产生2倍的数据量,如果少2个,则会产生四倍的数据量,以此类推,而且最要命的问题是多产生出的这些数据没有任何作用而且全是干扰数据,会在我们的程序上滋生很多问题,例如在程序里面你认为经过查询之后符合条件的数据只会有一笔,所以你一直是用datatable1.rows(0)(0)这样给画面字段塞值的,可是发现有时候对有时候不对(第一次新增时候是对的,以后修改后再查询又是错的).这就是因为多出来的数据导致了这个问题.
2.为什么呢?on里面只允许写关联字段,多个用and连接起来,如果你写了某一个表的条件在里面,其实是没有作用的.例如B on A.UID=B.UID and a.uname='mike',这里a.uname='mike'其实就没有产生任何作用.所以楼主上面的理由不妥哦:对于右边表的每条记录,显然a.uname='mike'这个条件都是成立.而把这些非关联的条件要写在where里面.

3.记住是在子表的on里面要写所有和主表有关联的字段,不可以少.至于说有很多重复关联的字段,我现在的做法是把主表子表已经子表之间关联的字段都写上.这是安全的做法.

distinct顺序:SQL SERVER /oracle:先显示需要的字段,再distinct


另外有一点是:left join,inner join from a,b
的应用场合:left join用在大多数场合,如果你是要讲主表中符合条件(where主表.字段= '中国')的数据都查出来,那么就用它.
inner join则是说如果你要查询的数据有严格的条件限制,即要求主表完全满足又要求子表完全满足,而且不能在子表中用null的形式搪塞,那么就用inner join吧.
最后一个是我们原来在书本中的知识了,功能和inner join是一模一样的,估计是是因为考虑到from这样的形式不够清晰吧.

sys_guid()能够生成一个随机字段用以存主键

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值