对于写sql语句,本身就是半吊子,更别提是稍微复杂一点的语句;今天在改bug的过程中,就遇到了几个不大不小的问题,细细想来,基本都是关联查询的问题,这里的关联并不是左联(left join)和右联(right join),今天遇到的是union和union all这两个。
先来看看它们的区别:
union 检查重复,关联的字段值都要相同 union all 不做检查,关联的表的字段都显示出来
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
遇到的第一个问题,是数据重复的问题;当要进行采购和销售对比的时候,当天是否有采购单,或者是否有销售单,但是即使都有,两者可能会是同一中商品,也可能不是,所以这里就会出现重复数据;对于菜鸟,写这样的语句无疑是个挑战,没办法,那也得写啊!写了很多(反正是很久),总算写出了不论速度的语句;当以销售为主,关联采购的时候,可能会出现没有的情况,所以这里要使用ifnull函数,这时候的列已经确定了,第二个重复数据的问题就是由于以采购为主的时候,关联订单的时候,出现了列值不同的情况,经检查是因为sql语句有问题,查询字段的获取问题--代码待贴。。。
当用union关联两个查询的时候,我用了order by排序,很不幸,报错了,在网上搜了一下,是什么语法的问题,要加上(),实验过后果然这样
(SELECT E_Name FROM Employees_China order by name) UNION (SELECT E_Name FROM Employees_USA order bu name)union这个优缺点还在探索中,希望大神引导指正。。。。