解决方案 »

  1.   

    把问题写全点,如果真是你描述的sql,不会报错的。
      

  2.   


    blkno字段是我虚构的,在prjmst表中 blkno 字段确实是不存在。 
    主要是想知道 第二条语句为什么不报错?究竟是怎么执行的?
      

  3.   

    确认是否有变量名为blkno,这可能取得的是变量名
      

  4.   

    有图有真相,请上图。
    注意这里是oracle版块
      

  5.   

    有图有真相,请上图。
    注意这里是oracle版块上述语句是在Toad中运行的结果。。
      

  6.   

    报错是正常反应,
    把不报错的截图贴上来,最好能有结果
    截图就不传了。不报错查询的是DPSDDP 表中的数据。
      

  7.   

    select * from dpsddp  where blkno in (select blkno from prjmst where prjno='H4001')==>select * from dpsddp t1  where t1.blkno in (select t1.blkno from prjmst t2 where t1.prjno='H4001')
    导致t2只要有数据,t1中的记录就会被全部检索出来
    在多表存在连接的情况下,别名很重要
      

  8.   


    nice
    数据库执行的sql汇改写成表连接
      

  9.   

    quote=引用 10 楼 wildwave 的回复:]
    select * from dpsddp  where blkno in (select blkno from prjmst where prjno='H4001')==>select * from dpsddp t1  where t1.blkno in (select t1.blkno from prjmst t2 where t1.prjno='H4001')
    导致t2只要有数据,t1中的记录就会被全部检索出来
    在多表存在连接的情况下,别名很重要说的很有道理,但是问题还是存在。上图[
      

  10.   

    刚刚看错了,不好意思。问题解决,谢谢
    select count(*) from dpsddp t1  
    where t1.dwggr in (select t2.dwggr from prjmst t2 where t2.prjno='H4001')
      

  11.   

    如果blkno在dpsddp  表中存在,并且你不指定别名,内查询的blkno会被认为是外查询表dpsddp的值,因此查处了所有dpsddp的值,该等式就成了恒等式了