我的ZSGL表中SSMC字段不可能重复,要用UNION ALL 吗?

解决方案 »

  1.   


    select trim(ssmc) from zsgl
    minus
    select trim(ssmc)
    from 
    (
    select cblcode ssmc from c_cable 
    union
    select dpnum ssmc from c_dpoint
    union
    select mhnum  ssmc from d_manhle
    union
    select cabnum ssmc from c_cabint
    union
    select dtype||dnum ssmc from d_ductgp
    union
    select cblcode ssmc from w_fbecbl
    union
    select cabnum  ssmc from w_fabint
    union
    select ternum ssmc from w_terminator
    union
    select plinename ssmc from d_pline
    union
    select dpnum ssmc from w_dpoint
    ) A
      

  2.   

    换种写法吧
    SELECT SSMC FROM zsgl WHERE SSMC NOT IN 
    (select cblcode ssmc from c_cable) AND
    SSMC NOT IN
    (select dpnum ssmc from c_dpoint) AND
    SSMC NOT IN
    (select mhnum  ssmc from d_manhle)...接着下去then ok
      

  3.   

    楼上的,好象你的办法真行,为什么呢,是否因为括号中各表查出的字段长度不等,做UNION时数据库会统一为最长的那个表的字段而为其它表的字段加上空格的原因?
      

  4.   

    cnkent(凤凰)君:用MINUS,UNION这样的集合操作效率高些,查询速度快(我过百万的纪录)。
      

  5.   

    哦 既然trim行了 就好了:)
      

  6.   

    考虑用外连接的方法:
    select ssmc from zsgl,(select cblcode ssmc from c_cable 
    union
    select dpnum ssmc from c_dpoint
    union
    select mhnum  ssmc from d_manhle
    union
    select cabnum ssmc from c_cabint
    union
    select dtype||dnum ssmc from d_ductgp
    union
    select cblcode ssmc from w_fbecbl
    union
    select cabnum  ssmc from w_fabint
    union
    select ternum ssmc from w_terminator
    union
    select plinename ssmc from d_pline
    union
    select dpnum ssmc from w_dpoint) temptb
      where zsgl.ssmc=tempdb.ssmc(+) and tempdb.ssmc is null试试效率 ?