大家好,我在桌子下面 -
tr_resource as res -
Resourceid name
135021 ABC
tr_charac为chlev -
characid name
1 CH1
2 CH2
tr_characvalue as cvlev -
characvalueid characid stringvalue
cv1 1 XX
cv2 2 YY
cv3 2 zz
tr_resourcecharac为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
但是当我在查询下面运行时,我没有得到任何答案 -
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 null
你能帮忙吗?
答案 0 :(得分:1)
您必须将所有内部联接更改为左外部联接。
答案 1 :(得分:0)
这并不能解释为什么您的第一个查询有效,但根据您显示的数据,我认为不会加入:
chlev.CHARACID = cvlev.CHARACID
应该工作,chlev是tr_charac的别名,表中的CHARACID是1和2,而cvlev是tr_characvalue的别名,CHARACID在这里是ch1,ch2& CH 2。
<强>更新强>
感谢您的澄清。我认为问题在于以下几行:
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_resource连接到tr_characvalue(即使使用其他具有外连接的表等),因为它们之间的唯一链接是tr_resourcecharac中的数据,该数据目前只有CV2的记录