最近应客户要求搞一个比较复杂的报表,数据来源于两个表,需要合成到一个视图里面再进行二次加工,在生成view时使用了union连接这个语法.结果发现新问题,当两个表都有数据时,进行union连接操作后数据就减少了一些.如果去掉union连接,单表查询的结果是正常的,说明union连接这里肯定是有问题.
经查证,按SQL Anywhere的手册说明如下:
The UNION operator combines the results of two or more queries into a single result set.
By default, the UNION operator removes duplicate rows from the result set. If you use the ALL option, duplicates are not removed.
UNION运算符结合了两个或两个以上成单个结果集的查询结果。
默认情况下,UNION运算符删除重复行的结果集。如果使用ALL选项,不会删除重复。
UNION在进行表连接后会筛选掉重复的记录,所以在表连接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
解决办法很简单,采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。
开发人员都应该多分享,有了内容,搜索引擎搜索时才有可能查得到.
发现一篇更详细的文章.请看这里:http://dev.firnow.com/course/7_databases/sql/sqlServer/20081216/153831.html