2013-07-23 213 views
1

我有以下查詢 -優化查詢聯接

select res.name, test.stringvalue 
from tr_resource res 
left outer join 
(select rch.resourceid,cv.stringvalue from tr_resourcecharac rch 
inner join tr_characvalue cv on rch.characvalueid = cv.characvalueid 
inner join tr_charac ch on cv.characid = ch.characid and ch.name='Security Clearance Required')test 
on res.resourceid=test.resourceid 
where res.resourceid=135021 

我得到以下輸出這一點 -

name stringvalue 
ABC null 

我不想使用子查詢後,左聯接。可否請您讓我知道如果有寫這個查詢作爲系列的加入,我試圖寫下面的方式 -

select res.name,cv.stringvalue 
from tr_resource res 
left outer join tr_resourcecharac rch on res.resourceid=rch.resourceid 
inner join tr_characvalue cv on rch.characvalueid =cv.characvalueid 
inner join tr_charac ch on ch.characid=cv.characid and ch.name='Security Clearance Required' 
where res.resourceid=135021 

但這查詢產生任何輸出。

對於您可以參閱表方案 -

tr_resource爲 -

Resourceid name 
135021  ABC 

tr_charac作爲

characid name 
1   Security Clearance Required 
2   CH2 

tr_characvalue爲 -

characvalueid characid stringvalue 
cv1    1  XX 
cv2    2  YY 
cv3    2  zz 

tr_resourcecharac爲 -

resourceid characvalueid 
135021   cv2 

我已經提出這個問題,但沒有人回答。因此,重新發布該問題提供更多信息

+0

您在這裏發佈同樣的問題:http://stackoverflow.com/questions/17805712/left-outer-join-not-working!? – slavoo

+0

是的,我試圖刪除它,但不能...已經提出刪除舊帖子的主持人。我在這裏提供了更多的信息 – anidesh

回答

0

可以作爲

SELECT res.name, 
     cv.stringvalue 
FROM tr_resource res 
     LEFT OUTER JOIN tr_resourcecharac rch 
         INNER JOIN tr_characvalue cv 
         ON rch.characvalueid = cv.characvalueid 
         INNER JOIN tr_charac ch 
         ON cv.characid = ch.characid 
          AND ch.name = 'Security Clearance Required' 
     ON res.resourceid = test.resourceid 
WHERE res.resourceid = 135021 

重寫查詢,而無需派生表我懷疑這將是一個優化,雖然。這只是表達同一事物的一種替代方式。

或另一種方式是

SELECT res.name, 
     cv.stringvalue 
FROM tr_resourcecharac rch 
     INNER JOIN tr_characvalue cv 
     ON rch.characvalueid = cv.characvalueid 
     INNER JOIN tr_charac ch 
     ON cv.characid = ch.characid 
      AND ch.name = 'Security Clearance Required' 
     RIGHT OUTER JOIN tr_resource res 
     ON res.resourceid = test.resourceid 
WHERE res.resourceid = 135021 
+0

感謝martin ...我從來不知道我們可以在條件寫上由你寫的左外部連接....它工作完美 – anidesh

+0

@anidesh - 同樣在這種情況下,所有其他連接'INNER JOINS'你可以把它們全部放在最後,然後'RIGHT JOIN'放在'tr_resource'末尾。 –

+0

@ martin ..再次感謝 – anidesh