两张表:T_XMSSJC T_DLJG,T_XMSSJC里有个外键字段dljg引用的是T_DLJG表的主键xh
我写的sql:select x.*,d.gsmc from T_XMSSJC x,T_DLJG d where x.dljg=d.xh
这样写有个问题,就是把x.dljg is null的记录给过滤掉了,请问怎样把所有的记录都带
出来

解决方案 »

  1.   

    既然xh是主键,
    dljg是他的外键,
    那dljg怎么会有为空的情况呢?
      

  2.   

    where   x.dljg(+)=d.xh 
      

  3.   

    同意楼上的方法,用左外连接.select x.*,d.gsmc from t_xmssjc x left join  t_dljg d on x.dljg=d.xh顺便对1楼的说一句,外键要么有值(如果有,则一定是参考表中字段的某个值),也可以为NULL
      

  4.   

    where       x.dljg(+)=d.xh   
    不是很明白,这是左连接的简写吗?
      

  5.   

    select   x.*,d.gsmc   from   t_xmssjc   x   left   join     t_dljg   d   on   x.dljg=d.xh 
      

  6.   

    没错.用左连接.楼主给分吧.
    select       x.*,d.gsmc       from       t_xmssjc       x       left       join           t_dljg       d       on       x.dljg=d.xh   
      

  7.   

    select   x.*,d.gsmc   from   T_XMSSJC   x,T_DLJG   d   where   nvl(x.dljg,0)=nvl(d.xh,0)这样也应该可以。
      

  8.   

    TO chenqingyu:
    参照的列可以是NULL的。
    在外键定义的时候,有一个选项就是on delete set null,就是主表记录删除的时候,设置子表的相关记录为null.从LZ这次的情况来看,就是定义了这样的类型。
    只要用左外联结就可以。写法的话,上面写了很多了。就不重复了。