Sql 左外连接不工作

Sql 左外连接不工作,sql,oracle10g,left-join,Sql,Oracle10g,Left Join,你好,我所有的桌子都在下面- tr_资源作为资源- Resourceid name 135021 ABC tr_charac as chlev- characid name 1 CH1 2 CH2 tr_characvalue作为cvlev- characvalueid characid stringvalue cv1 1 XX cv2 2 YY cv3

你好,我所有的桌子都在下面-

tr_资源作为资源-

Resourceid  name
135021          ABC
tr_charac as chlev-

characid   name
1          CH1
2          CH2
tr_characvalue作为cvlev-

characvalueid characid stringvalue
cv1             1       XX
cv2             2       YY
cv3             2       zz
tr_resourcecharac as rchlev-

resourceid  characvalueid
135021          cv2
当我在下面运行查询时-

select 
    res.name,
    cvlev.stringvalue
from tr_resource res
    left outer join tr_resourcecharac rchlev on res.RESOURCEID = rchlev.RESOURCEID
    inner join tr_characvalue cvlev on  rchlev.CHARACVALUEID = cvlev.CHARACVALUEID 
    inner join tr_charac chlev on chlev.CHARACID = cvlev.CHARACID and chlev.NAME = 'CH2'
 where res.resourceid=135021
我得到的答案是-

name  stringvalue
ABC      YY
name  stringvalue
ABC      null
但当我在下面运行查询时,我并没有得到任何答案-

select 
    res.name,
     cvlev.stringvalue
 from tr_resource res
     left outer join tr_resourcecharac rchlev on res.RESOURCEID = rchlev.RESOURCEID
     inner join tr_characvalue cvlev on  rchlev.CHARACVALUEID = cvlev.CHARACVALUEID 
     inner join tr_charac chlev on chlev.CHARACID = cvlev.CHARACID and chlev.NAME = 'CH1'
 where res.resourceid=135021
我想得到答案-

name  stringvalue
ABC      YY
name  stringvalue
ABC      null

请您帮忙好吗?

您必须将所有内部联接更改为左侧外部联接。

这并不能解释为什么您的第一个查询可以工作,但根据您显示的数据,我不认为联接:

chlev.CHARACID = cvlev.CHARACID
chlev是tr_charac的别名,表中的CHARACID是1和2,而cvlev是tr_characvalue的别名,这里的CHARACID是ch1、ch2和ch2

更新

谢谢你的澄清。我认为问题在于以下几点:

inner join tr_characvalue cvlev on  rchlev.CHARACVALUEID = cvlev.CHARACVALUEID
您试图在CHARACVALUEID上连接这两个表,但tr_resourcecharac中唯一的CHARACVALUEID是CV2,因此这将只在tr_characvalue中找到CV2行。tr_characvalue连接到characid上的tr_charac,因此只能找到CH2行。当查询过滤到chlev.NAME='CH1'时,不会返回任何结果


关键是,对于您拥有的数据,您无法从tr_资源连接到tr_characvalue(甚至使用具有外部连接的其他表等)因为它们之间的唯一链接是tr_resourcecharac中的数据,目前只有CV2的记录。

Hi Raniendu感谢您的回复,但用左侧外部联接替换内部联接没有成功work@anidesh我已经更新了上面的答案。恐怕您的表不包含创建您试图创建的联接所需的所有数据。