SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A left join BAS_FORMEATTR B
on A.ELEID=ISNULL(B.ELEID, '')
AND A.OBJID='00000329' and ISNULL(B.ELEID, '')!=''
 AND B.DLFLG!='1'
ORDER BY A.ELEID结果找到的结果中,有A.OBJID='00000000'等等很多不符合的数据,这此数据里的B部分的都是空
请问是哪里出错了?

解决方案 »

  1.   


    SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A left join BAS_FORMEATTR B
    on A.ELEID=B.ELEID AND A.OBJID='00000329' and ISNULL(B.ELEID, '')<>''
     AND B.DLFLG<>'1'
    ORDER BY A.ELEID
      

  2.   

    SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A left join BAS_FORMEATTR B
    on A.ELEID=ISNULL(B.ELEID, '')
    where  A.OBJID='00000329' and ISNULL(B.ELEID, '')!=''
     AND B.DLFLG!='1'
    ORDER BY A.ELEID
    试试
     ISNULL(B.ELEID, '')!=''
     我怎么看着这么不爽呢写成B.ELEID is not null and B.ELEID != ''不行吗 
    还可以用到索引。
      

  3.   

    试试这个,你的判断真纠结
    SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A 
    left join BAS_FORMEATTR B on A.ELEID=ISNULL(B.ELEID, '')
    where A.OBJID='00000329' and ISNULL(B.ELEID, '')<>''
     AND B.DLFLG <> '1'
    ORDER BY A.ELEID
      

  4.   

    SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A 
    left join BAS_FORMEATTR B
    on A.ELEID=ISNULL(B.ELEID, '')
    where  A.OBJID='00000329' and B.ELEID is not null AND B.DLFLG!='1'
    ORDER BY A.ELEID
      

  5.   


    SELECT B.*, A.ELEID AS ALLOWID FROM BAS_FORME A 
    left join BAS_FORMEATTR B
    on A.ELEID=ISNULL(B.ELEID, '') 
    AND A.[OBJID]='00000329' 
    and ISNULL(B.ELEID, '')<>'' 
    AND B.DLFLG <>'1'
    ORDER BY A.ELEID
      

  6.   


    SELECT B.*, A.ELEID AS ALLOWID FROM BAS_FORME A 
    left join BAS_FORMEATTR B
    on A.ELEID=ISNULL(B.ELEID, '') 
    where 1=1
    AND A.[OBJID]='00000329' 
    and ISNULL(B.ELEID, '') <> '' 
    AND B.DLFLG <> '1'
    ORDER BY A.ELEID
      

  7.   

    --有这句在,不会出现A.OBJID='00000000'吧?呵呵
    SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A left join BAS_FORMEATTR B
    on A.ELEID=ISNULL(B.ELEID, '')
    AND A.OBJID='00000329' and ISNULL(B.ELEID, '')!=''
     AND B.DLFLG!='1'
    ORDER BY A.ELEID
      

  8.   

    关联条件用主键,筛选条件写在where后面
      

  9.   


    SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A left join BAS_FORMEATTR B
    on A.ELEID=ISNULL(B.ELEID, '')
    where A.OBJID='00000329' and ISNULL(B.ELEID, '')<>''
     AND B.DLFLG<>'1'
    ORDER BY A.ELEID
      

  10.   


    SELECT  * ,
            A.ELEID AS ALLOWID
    FROM    BAS_FORME A
            inner JOIN BAS_FORMEATTR B ON A.ELEID = ISNULL(B.ELEID, '')
                                         AND A.OBJID = '00000329'
                                         AND ISNULL(B.ELEID, '') != ''
                                         AND B.DLFLG != '1'
    ORDER BY A.ELEID
      

  11.   

    如果左连接,where不加条件,on中不管什么条件,A表的记录都会全部出来,结果相当于a与b内连接的结果加上A表中未连接的记录,b表中用null填充。
    如果想过滤掉A.OBJID<>'00000329' 的记录,建议改为
    SELECT *, A.ELEID AS ALLOWID FROM BAS_FORME A left join BAS_FORMEATTR B
    on A.ELEID=ISNULL(B.ELEID, '')
    AND ISNULL(B.ELEID, '')!=''
     AND B.DLFLG!='1'
    where A.OBJID='00000329'
    ORDER BY A.ELEID
      

  12.   

    cxmcxm解释得比较详细,觉得有道理
    我原来的语句,结果就是cxmcxm说的这样的
    要在where 里做限制而不是在on ...里做限制