两表关联查询问题,sql应该怎么写

plkayst 2007-12-19 04:56:18
两张表: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的记录给过滤掉了,请问怎样把所有的记录都带
出来
...全文
151 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjinjie 2008-01-03
  • 打赏
  • 举报
回复
select x.*,d.gsmc from T_XMSSJC x,T_DLJG d where nvl(x.dljg,0)=nvl(d.xh,0)

这样也应该可以。
Croatia 2008-01-03
  • 打赏
  • 举报
回复
TO chenqingyu:
参照的列可以是NULL的。
在外键定义的时候,有一个选项就是on delete set null,就是主表记录删除的时候,设置子表的相关记录为null.

从LZ这次的情况来看,就是定义了这样的类型。
只要用左外联结就可以。

写法的话,上面写了很多了。就不重复了。
zhongguoren666 2008-01-02
  • 打赏
  • 举报
回复
没错.用左连接.楼主给分吧.
select x.*,d.gsmc from t_xmssjc x left join t_dljg d on x.dljg=d.xh
gebz456 2007-12-20
  • 打赏
  • 举报
回复
对,用一个“+”号就可以了。方便点
windlysnowly 2007-12-20
  • 打赏
  • 举报
回复
select x.*,d.gsmc from t_xmssjc x left join t_dljg d on x.dljg=d.xh
shui_windows 2007-12-20
  • 打赏
  • 举报
回复
wangdt100 2007-12-20
  • 打赏
  • 举报
回复
where x.dljg(+)=d.xh
不是很明白,这是左连接的简写吗?
bai_jiong 2007-12-19
  • 打赏
  • 举报
回复
同意楼上的方法,用左外连接.

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

顺便对1楼的说一句,

外键要么有值(如果有,则一定是参考表中字段的某个值),也可以为NULL
dennis80 2007-12-19
  • 打赏
  • 举报
回复
where x.dljg(+)=d.xh
chenqingyu 2007-12-19
  • 打赏
  • 举报
回复
既然xh是主键,
dljg是他的外键,
那dljg怎么会有为空的情况呢?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧