我现在碰到一个这样的问题 我从好几张表里面 union all查询数据 ,现在可能会出现 从一张表里根据不同的条件会取出相同的数据记录的问题
sql 语句如下:SELECT * FROM(SELECT A.agendaid,A.agendatitle,A.agendacomment,A.starttime,A.endtime,A.optuserid,A.state,E.username AS optusername,'no' AS isviewer,'agenda' AS showtype 
FROM tb_oa_agenda A, tb_users E WHERE E.userid = A.optuserid AND E.orgcode like '%C%' AND E.userid!='yaogl'
UNION ALL SELECT B.levid AS agendaid,B.comments AS agendatitle,B.reason AS agendacomment,B.begindate AS starttime ,B.enddate AS endtime ,B.staffid AS optuesrid,B.status AS state,E.username AS optusername,'no' AS isviewer,'leave' AS showtype 
FROM tb_oa_leave B,tb_users E WHERE E.userid =B.staffid AND E.orgcode like '%C%'  AND E.userid!='yaogl'
UNION ALL SELECT C.eid AS agendaid,C.destination AS agendatitle,C.reason AS agendacomment,C.planbegintime AS starttime,C.planendtime AS endtime,C.userid AS optuserid,C.evestatus AS state,E.username AS optusername,'no' AS isviewer,'eve' AS showtype
FROM tb_oa_evection C,tb_users E WHERE E.userid=C.userid AND E.orgcode like '%C%' AND E.userid!='yaogl' 
UNION ALL SELECT F.agendaid,D.agendatitle,D.agendacomment,D.starttime,D.endtime,D.optuserid,D.state,F.optusername,'yes' AS isviewer,'agenda' AS showtype 
 FROM tb_oa_agendaviewers F,tb_oa_agenda D WHERE D.agendaid = F.agendaid AND F.viewerid = 'yaogl' 
) tb WHERE 1=1 order by tb.agendaid************************************************************************************************************SELECT A.agendaid,A.agendatitle,A.agendacomment,A.starttime,A.endtime,A.optuserid,A.state,E.username AS optusername,'no' AS isviewer,'agenda' AS showtype 
FROM tb_oa_agenda A, tb_users E WHERE E.userid = A.optuserid AND E.orgcode like '%C%' AND E.userid!='yaogl'*************************************************************************************************************SELECT F.agendaid,D.agendatitle,D.agendacomment,D.starttime,D.endtime,D.optuserid,D.state,F.optusername,'yes' AS isviewer,'agenda' AS showtype 
 FROM tb_oa_agendaviewers F,tb_oa_agenda D WHERE D.agendaid = F.agendaid AND F.viewerid = 'yaogl' 
这两条独立的语句会出现查出的数据 重复的情况 其他几个语句不会 目前我都用 union all 我知道这个不能去除重复语句
union 可以去除但是 全部都用union是不是有点多余 我想知道能不能只 在那两条会重复的语句间用union 其他的不用?

解决方案 »

  1.   


    在哪加 具体些 ?(SELECT A.agendaid,A.agendatitle,A.agendacomment,A.starttime,A.endtime,A.optuserid,A.state,E.username AS optusername,'no' AS isviewer,'agenda' AS showtype 
    FROM tb_oa_agenda A, tb_users E WHERE E.userid = A.optuserid AND E.orgcode like '%C%' AND E.userid!='yaogl' UNION SELECT F.agendaid,D.agendatitle,D.agendacomment,D.starttime,D.endtime,D.optuserid,D.state,F.optusername,'yes' AS isviewer,'agenda' AS showtype 
     FROM tb_oa_agendaviewers F,tb_oa_agenda D WHERE D.agendaid = F.agendaid AND F.viewerid = 'yaogl')是这样吗?
      

  2.   

    SELECT ...UNION ALL(
    SELECT ...
    UNION 
    SELECT ...
    )UNION ALLSELECT ...
      

  3.   

     先UNION然后再从UNION后的表中进行SELECT DISTINCT