sql里面leftjoin多表的问题记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lonyness1995/article/details/55101445
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()能够生成一个随机字段用以存主键

展开阅读全文

没有更多推荐了,返回首页