我有三个表,情况如下:select A.*,B.列名,C.* from 
 A,
 B,
 C 
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')结果查询出来的列都没有值,然后去掉C表:select A.*,B.列名from 
 A,
 B
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')结果查询出来就有值了!
==============
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')
这个条件肯定是满足的!
======
请教为什么会出现这种情况??????????????????

解决方案 »

  1.   

    没有列值?应该是没有记录吧。
    如果关联查询没有记录,按你的情况,肯定是C表没有记录。
    也就是说,如果A,B两个表关联,只要任一个表中没有记录,
    即使没有任何关联条件,都不会查询出记录。
    即:select * from a,b;是查询不到记录的!
      

  2.   

    对,我的C表是空的,但是A,B两表有值!我希望就算C表没值但是AB两个表的值也要出现应该怎么写呢?
      

  3.   

    那我应该怎么做呢?
    我希望联合查询的时候如果C表没值可以显示空,但是不能影响A,B表的值显示!
      

  4.   

    select A.*,B.列名,nvl(C.列名,null) from 
     A,
     B,
     C 
    where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')
      

  5.   

    如果我要查C.*怎么办?nvl(C.*,null)???
      

  6.   


    想到了一个办法,可以试试。先用a,b关联查询的集合再与c表进行外连接。如下:
    select * (select A.*,B.列名 TX from 
     A,
     B where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')
    ) tmp,C where tmp.TX = C.列名(+)(任意列
      

  7.   

    left join肯定可以搞定的
    楼主补贴建表sql  和数据  懒得测试了