多表联合查询效率
效率太低下,不能采用这种方式。
然后改为左外连接,sql为:select t.* from et_core_thes_terms t left outer join et_core_thes_term_category ttc on t.id =ttc.termid left outer join et_task_term tt on t.id =tt.termId where
query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2
query1 和 query2 都是可以使用我们到此为止讨论的所有查询特性的查询。集合操作也可以嵌套和级连,比如
query1 UNION query2 UNION query3
实际上说的是
(query1 UNION query2) UNION query3
UNION 有效地把 query2 的结果附加到 query1 的结果上(不过我们不能保证这就是这些行实际返回的顺序)并且删除结果中所有重复的行,就象DISTINCT做的那样,除非你声明了UNION ALL。
INTERSECT 返回那些同时存在于 query1 的结果中和 query2的结果中的行,除非声明了INTERSECT ALL,否则所有重复行都被删除。
EXCEPT 返回所有在 query1 的结果中但是不在 query2 的结果中的行。 (有时侯这叫做两个查询的差。) 除非声明了 EXCEPT ALL,否则所有重复行都被删除。
为了计算两个查询的并,交,差,这两个查询必须是"并集兼容的",也就意味着它们都返回同样数量的列,并且对应的列有兼容的数据类型。
最后的sql语句为:
select ect.id,ect.name from ( select ttc.termid from et_core_thes_term_category ttc where ttc.categoryno='56GA' and ttc.inschemeid=14653
INTERSECT
INTERSECT
效率较前两种情况明显的提高了。从而解决了问题。
转自:http://blog.youkuaiyun.com/zhen_ya/article/details/6284061