select * from (select distinct a.kcmc from a left OUTER JOIN b on a.ID=b.CoreID) m
where m.kcmc not in 
(select distinct kcmc from a right OUTER JOIN b on a.ID=b.CoreID)

解决方案 »

  1.   

    select   distinct   a.kcmc       from   a     left   OUTER   JOIN   b     on   a.ID=b.CoreID
    select   distinct   kcmc     from   a     right   OUTER   JOIN   b   on   a.ID=b.CoreID   这两句单独运行,查出来的结果如果有你需要的,那么
    select * (...) m where id not in () 就肯定行
      

  2.   

    ---try
    select   distinct   a.kcmc       from   a     left   OUTER   JOIN   b     on   a.ID=b.CoreID where     a.ID   not   in 
    (select   distinct   id     from   a     right   OUTER   JOIN   b   on   a.ID=b.CoreID   )   
      

  3.   

    又试过了,因为如果用id的话,我需要在select中加入id,这样发生错误:当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。而我将后半部分的kcmc去掉,结果仍然是空,分开查看还是可以获取值。  这个问题真够晕的,此语句是我几个月前正确使用的,不知道怎么了,见鬼了!
      

  4.   

    select   distinct   a.kcmc       from   a     left   OUTER   JOIN   b     on   a.ID=b.CoreID where     kcmc   not   in 
    (select   distinct   kcmc     from   a     right   OUTER   JOIN   b   on   a.ID=b.CoreID   )-------------------
    select kcmc from a
    where not exists(select 1 from a,b where a.ID=b.CoreID)
      

  5.   

    简略一点:
    a(id,kcmc,kcinfo)
    b(id,coreid,teachername)
    其中coreid为外键第一部分取出的值:LCCIEB课程
    保险学概论
    毕业论文(会) 第二部分取出的值:保险学概论
    毕业论文(会)这样看来第一条就应该是得到的值,但是最后取到空。
      

  6.   

    把上面的kcmc的加rtrim(),ltrim(),去掉前后空格试试--能否给出表数据.这样测试不了.
      

  7.   

    弄不明白了
    select   distinct   a.kcmc       from   a     left   OUTER   JOIN   b     on   a.ID=b.CoreIDwhere  coreid isnull 
    还right join干什么?是我错了又?
      

  8.   

    可能是因为select       distinct       kcmc           from       a           right       OUTER       JOIN       b       on       a.ID=b.CoreID 有null值
    select   distinct   a.kcmc       from   a     left   OUTER   JOIN   b     on   a.ID=b.CoreID where  a.kcmc is nullselect   distinct   kcmc     from   a     right   OUTER   JOIN   b   on   a.ID=b.CoreID   
    where kcmc  is null
    看一下
      

  9.   


    --同意楼上的说法
    select   distinct   kcmc     
    from   a     right   
    OUTER   JOIN   b   on   a.ID=b.CoreID
    可能有NULL值!
      

  10.   


    --前几天也遇到此情况了!就是出现了NULL值了!
      

  11.   

    select distinct kcmc form a where not exists(select 1 from b where a.ID=b.CoreID)二 外联接中 "ON + AND" 与 "ON + WHERE" 的区别  1、on条件是外联接时在生成临时表时使用的联结条件,不论从表是确定值还是NULL,主表所有的值都会出现;  如果再加上and条件;如果and条件引用的是主表的列,则对结果毫无影响,主表的所有纪录依然会全部出现;如果and条件引用的是从表的列,则不符合条件的从表纪录显示NULL;  2、where条件是在临时表生成后,再对临时表进行过滤的条件。临时表中的所有纪录都受影响,不符合条件的纪录被过滤出结果集;
      

  12.   

    以前碰到过.
    Null值的问题;
      

  13.   

    如果有NULL,加多个条件and col is not null
      

  14.   

    如果有NULL,也可以加这个条件and isnull(col,'') <> ''
    如果这个值有''的话,那就isnull(col,'/*这里赋个其它值*/')
      

  15.   

    select distinct kcmc form a where not exists(select 1 from b where a.ID=b.CoreID)二 外联接中 "ON + AND" 与 "ON + WHERE" 的区别  1、on条件是外联接时在生成临时表时使用的联结条件,不论从表是确定值还是NULL,主表所有的值都会出现;  如果再加上and条件;如果and条件引用的是主表的列,则对结果毫无影响,主表的所有纪录依然会全部出现;如果and条件引用的是从表的列,则不符合条件的从表纪录显示NULL;  2、where条件是在临时表生成后,再对临时表进行过滤的条件。临时表中的所有纪录都受影响,不符合条件的纪录被过滤出结果集;
      

  16.   

    刚才开了个小会,回来就看到正确的解决方案了,果然是mull的问题,激动ing,这样今天就没有白过了,哈哈!
    学习了,谢谢大家!