有2个表: 表A和表B, A_pk、B_pk为各自主键字段
有这样一个SQL:
select * from A where A_pk IN (select A_pk FROM B where B_PK = 123)
有个问题:A_pk在表B中不存在
这个SQL 在plsql下执行成功,查询出表A的所有记录,但单独执行子查询select A_pk FROM B where B_PK = 123
就会报无效标识符的错误,怎么回事,有什么内幕吗?望指点

解决方案 »

  1.   

    没有什么特殊字段接连,B表中就是没有A_pk,整个SQL能够查询出结果,IN里的子查询单独查询却报错,所以纳闷,
    不知道是不是执行SQL时有什么地方跳过了判断?
      

  2.   

    select * from A where A_pk IN (select A_pk FROM B where B_PK = 123) 
    ==
    select * from A where A_pk IN (select A.A_pk FROM B where B_PK = 123) 因为如果不特定指定表名,会认为是外层的表
    你要写select * from A where A_pk IN (select B.A_pk FROM B where B_PK = 123) 
    一定挂
      

  3.   

    select A.A_pk FROM B where B_PK = 123
    这个的查询结果是什么呢?所有A表中的A_pk?
      

  4.   

    如果where B_PK = 123 成立,相当于写a=a,永真
    如果where B_PK = 123 不成立,相当于写a=null,永假
      

  5.   

    你检查一下B表中是否有A_pk字段吗?
      

  6.   


    不对IN里面的SQL语句执行是否正确做校验吗?