Sql 左外连接不工作
你好,我所有的桌子都在下面- tr_资源作为资源-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
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我已经更新了上面的答案。恐怕您的表不包含创建您试图创建的联接所需的所有数据。