日期:2014-05-17  浏览次数:20772 次

关于union all的 问题 ,求教。
Select   t_4.*
From   (Select   t_2.*
  From   Extend_Daily_Report   t_2
  Where   t_2.Dr_User_Id   =   '1920 '
  Union   All
  Select   t_0.*
  From   Extend_Daily_Report   t_0,   Extend_Daily_Task   t_1
  Where   t_0.Dr_Id   =   t_1.Dr_Id   And   t_1.Dt_Pm_Id   =   '1920 '   And   (t_0.Dr_Status   =   '1 '   Or   t_0.Dr_Status   =   '2 ')   And
  t_0.Dr_Dept_Id   <>   '2008 '  
  Union   All
  Select   t_3.*
  From   Extend_Daily_Report   t_3
  Where   (t_3.Dr_Status   =   '1 '   Or   t_3.Dr_Status   =   '2 ')   And   t_3.Dr_Dept_Id   =   '2008 '   And   t_3.dr_user_id <> '1920 ')   t_4

工作中写了一个这样得   sql   实现了我的需求,感觉用union   不妥。由于小弟sql很差求教各位给出一个不用union   all   的   sql   来实现这个功能。多谢

------解决方案--------------------
select t.* from Extend_Daily_Report t, Extend_Daily_Task t_1
where t.Dr_Id = t_1.Dr_Id
and dr_User_id= '1920 '
And (t.Dr_Dept_Id <> '2008 ' and (t.Dr_Status = '1 ' Or t.Dr_Status = '2 ') )
and ((t.Dr_Status = '1 ' Or t.Dr_Status = '2 ') And t.Dr_Dept_Id = '2008 ' And t.dr_user_id <> '1920 ')
------解决方案--------------------
Select t_0.*
From Extend_Daily_Report t_0, Extend_Daily_Task t_1
Where
t_0.Dr_User_Id = '1920 ' or
((t_0.Dr_Status = '1 ' Or t_0.Dr_Status = '2 ') And t_0.Dr_Dept_Id = '2008 ' And t_0.dr_user_id <> '1920 ') or
(t_0.Dr_Id = t_1.Dr_Id And t_1.Dt_Pm_Id = '1920 ' And (t_0.Dr_Status = '1 ' Or t_0.Dr_Status = '2 ') And t_0.Dr_Dept_Id <> '2008 ' )

------解决方案--------------------
luguo
------解决方案--------------------
用union all 效率上没什么影响吧,不用的话如果是一张表就把所有条件集合到一起就行了!