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 as -

Resourceid  name
135021       ABC

tr_charac as

characid   name
1          Security Clearance Required
2          CH2

tr_characvalue as -

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

tr_resourcecharac as -

resourceid  characvalueid
135021          cv2

私はすでにこの質問を提起しましたが、誰も答えませんでした。したがって、この質問をより多くの情報とともに再投稿します

4

1 に答える 1

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 
于 2013-07-23T11:32:44.060 に答える