关于表的连接问题
有两张表
T_MASTER
ID
REF_ID
XX
XXT_REF
ID
NAME
REF_TYPE现在要查询MASTER表的数据
SELECT MS.ID, MS.REF_NAME,MS.XX,MS.XX FROM T_MASTER MS,T_REF REF
WHERE REF.ID(+)=MS.REF_ID
AND REF.REF_TYPE(+)='CONSTANTS'
这个地方不太明白为什么要用右连接,连接时保证一边的数据全部出,
现在是想出全MASTER表的数据,为什么要使用右连接
若使用全连接的话,当REF_ID为空的话,MASTER的记录是出不来的为什么不是左连接或全连接呢?
有两张表
T_MASTER
ID
REF_ID
XX
XXT_REF
ID
NAME
REF_TYPE现在要查询MASTER表的数据
SELECT MS.ID, MS.REF_NAME,MS.XX,MS.XX FROM T_MASTER MS,T_REF REF
WHERE REF.ID(+)=MS.REF_ID
AND REF.REF_TYPE(+)='CONSTANTS'
这个地方不太明白为什么要用右连接,连接时保证一边的数据全部出,
现在是想出全MASTER表的数据,为什么要使用右连接
若使用全连接的话,当REF_ID为空的话,MASTER的记录是出不来的为什么不是左连接或全连接呢?
解决方案 »
- 装有oracle的服务器,过一段时间,不能操作,不能远程连接,但是能PING通
- 如果讲表名称和表对应的行数插入到一个表中,哪位兄台赐条SQL,谢谢。
- 请教checkpoint和redo log的数据库原理问题
- Oralce无法启动,Sys,System用户无法登陆
- 谁能给我一个win2000下oracle817的性能优化方案,200分送上
- 给表增加一个记录,默认值是字符1,如何写
- oracle 11g 中出现大量cursor mutex x
- 为什么每次进入Console都要用Configuration Assistant配置,重启后就又得配一下
- initialization error:Could not locate OCI dll
- 对触发器的一个小疑问:如果需要处理的字段太多如何书写?有没有自动拼装字段的方法呢?
- 选择事务还是触发器的问题
- 大家好,我想问大家一个ORACLE9i中merge into 的问题
T_REF 是从表 一般只有设计的话
就表示 在主表里一个REF_ID 对应从表T_REF里多个REF_ID
他们是1:N的关系
如果接触过明细表就很容易理解了
SELECT MS.ID, MS.REF_NAME, MS.XX, MS.XX
FROM T_MASTER MS, T_REF REF
WHERE MS.REF_ID = REF.ID(+)
AND 'CONSTANTS' = REF.REF_TYPE(+)
是对REF_TYPE那里不太明白,‘CONSTANTS’是一个常量,为什么要将这个作为左连接呢?
那这样出的数据的话不是所有TYPE 为‘CONSTANTS’的数据都出了,那MASTER只有一条数据呢?
FROM T_MASTER MS, T_REF REF
WHERE MS.REF_ID = REF.ID(+)
AND 'CONSTANTS' = REF.REF_TYPE(+)
如果不加AND 'CONSTANTS' = REF.REF_TYPE(+),Oracle会默认全连接了。
你把'CONSTANTS'想象成T_MASTER的另外一个Column就明白了。
可是当MASTER_.REF_ID为空的时候数据时出不来的
AND MS.REF_TYPE = REF.REF_TYPE(+)
AND MS.REF_TYPE='CONSTANTS'
这样想象
写错了
SELECT MS.ID, REF.REF_NAME,MS.XX,MS.XX FROM T_MASTER MS,T_REF REF
WHERE REF.ID(+)=MS.REF_ID
AND REF.REF_TYPE(+)='CONSTANTS'是REF.REF_NAME不是MS.REF_NAME
SELECT MS.ID, REF.REF_NAME, MS.XX, MS.XX
FROM T_MASTER MS, (SELECT ID, REF_NAME
FROM T_REF
WHERE REF_TYPE = 'CONSTANTS') REF
WHERE MS.REF_ID = REF.ID(+)也可以这样想象:
SELECT MS.ID, MS.REF_NAME, MS.XX, MS.XX
FROM T_MASTER MS, T_REF REF
WHERE MS.REF_ID = REF.ID(+)
AND MS.REF_TYPE(这里换成了实际值'CONSTANTS',T_MASTER表的值还是要全部显示) = REF.REF_TYPE(+)