select A.Anane,A.Atel,B.Bname,B.Btel
 ,(select C.Cname from C where A.Aid=C.Aid)
from A,B
where A.Aid=B.Aid

select A.Anane,A.Atel,B.Bname,B.Btel
 ,C.Cname
from A,B,C
where A.Aid=B.Aid and  A.Aid=C.Aid
当然不一样,1的笛卡儿积很大,记录数也比2多。
1的记录数相当于
select A.Anane,A.Atel,B.Bname,B.Btel
from A,B
where A.Aid=B.Aid

(select C.Cname from C where A.Aid=C.Aid)
的记录数

解决方案 »

  1.   

    在最基本的查询语句中,使用的是select  from  where 语句,where后面的条件
    可以比较各种标量的值,比如说整数、实数、字符串或者日期等简单的值或者代表这些值的表达式。
      实际上子查询扩展了这种观点,允许把整个元组甚至整个关系作为比较的内容!
      所以我认为你的第一个查询语句是错误的,子查询应该在where后面!
      

  2.   

    看错了
    select A.Anane,A.Atel,B.Bname,B.Btel
     ,(select C.Cname from C where A.Aid=C.Aid)
    from A,B
    where A.Aid=B.Aid
    应当是错的语句
      

  3.   

    子查询可以在fom 后或where后,没有在select 后的
    我刚才看错了。
      

  4.   

    只取一飘大哥,你没有看错,SELECT后面确实可以跟子查询,这我都验证过了。select A.Anane,A.Atel,B.Bname,B.Btel
     ,(select C.Cname from C where A.Aid=C.Aid)
    from A,B
    where A.Aid=B.Aid
    是我上机验证过的,没有语法错误,而且还可以查处结果来。
      

  5.   


    select A.Anane,A.Atel,B.Bname,B.Btel
     ,(select C.Cname from C where A.Aid=C.Aid)
    from A,B
    where A.Aid=B.Aid这种写法没错我见过,只是很少人这样用,但我也不知这样写有什么好处
      

  6.   

    可以在select 之后,我试过
      

  7.   

    你的记录数不一样的原因是
    select A.Anane,A.Atel,B.Bname,B.Btel
     ,C.Cname
    from A,B,C
    where A.Aid=B.Aid and  A.Aid=C.Aid
    要三个表同时有相同的Aid时才有结果,而在
    select A.Anane,A.Atel,B.Bname,B.Btel
     ,(select C.Cname from C where A.Aid=C.Aid)
    from A,B
    where A.Aid=B.Aid
    中,只要a和b有相同的Aid,查询就有结果
      

  8.   

    还有,我的第一贴是错的,我当时是看错了你的写法,
    你的两个查询记录数不一样处决于c,如果c包含了b or a的Aid,
    就是说这三个表中c是最大的时候,两个查询的记录数是一样的。
    建议采用
    select A.Anane,A.Atel,B.Bname,B.Btel
     ,C.Cname
    from A,B,C
    where A.Aid=B.Aid and  A.Aid=C.Aid
    简单,明了
    如果想取某一表的为基础的数据,可以采用外联

    select A.Anane,A.Atel,B.Bname,B.Btel
     ,C.Cname
    from A,B,C
    where A.Aid=B.Aid(+) 
    and  A.Aid=C.Aid(+)
    这样,你的查询的记录数与A的记录数一样
      

  9.   

    在8I或以上版本中,在SELECT中使用子查询是合法的,但是我不喜欢这么写