select * from goods,su,sa 
where goods.goodsid=su.goodsid(+) and goods.goodsid=sa.goodsid(+) order by goods.goodsid;
我想请问一下,where子句中,两个外联查询条件之间用and连接,这个该怎么理解呢?我试了一下,用or不能代替and,否则会报错,这是为什么呢?

解决方案 »

  1.   


      and 是两边的等式都必须返回true,在表示这个等式是成立的,而or 的意思是只要有一个成立就可以了!  如果你正想用or 来写这条sql的话,可以修改成一下:
     
     
      select *
      from goods, su, sa
     where (goods.goodsid = su.goodsid(+) or goods.goodsid = sa.goodsid(+))
       order by goods.goodsid; 
      

  2.   

    select * from goods
    left outer join su on goods.goodsid=su.goodsid
    left outer join sa on goods.goodsid=sa.goodsid
    order by goods.goodsid; 改写成这样比较容易理解吧。你那种写法已经不推荐用。
     
      

  3.   

    楼主没理解OR 跟and的 意思,OR 是带有判断的,and是相连的,理解这2个的意思,其实就很好理解了。
      

  4.   

    是不是goods和su先左连,得到的结果集在和sa左连,是这个意思吗?
      

  5.   

    我不是对and和or 不理解,我想问的是三个表的外联查询时怎么处理的,是先goods和su左连,得到结果在和sa左连吗?这里用的and是这个意思吗?