3

xml を使用してクエリ結果を表示しています。クエリに関連する問題が 1 つあります。顧客テーブルに、IDが他のテーブルの外部キーではないデータがあるとしますが、それでもデータを表示したいとします。つまり、これには左結合を使用します。しかし、問題は他のテーブル条件 (Where 節 pr.fActive=1...) にあります。これにより、顧客テーブルにのみ存在し、他のテーブルには存在しないデータを表示できません。どのようにそれを行うことができます

<Table>customer cu</Table>
          <Joins>
            left join customerprogramxref cuprxref on cu.ixcustomer=cuprxref.ixcustomer
            left join tblprogram  pr on cuprxref.ixprogram=pr.ixprogram
            left join programworkpackagexref prwpxref on pr.ixprogram= prwpxref.ixprogram
            left join workpackage wp on wp.ixworkpackage =prwpxref.ixworkpackage
            left join workpackageactivityxref wpactxref on              wpactxref.ixworkpackage=wp.ixworkpackage
            left join activity act on act.ixactivity=wpactxref.ixactivity
          </Joins>
          <WhereClause>
            cu.fStatus=1 AND pr.fActive=1 AND pr.fDeleted=0 AND wp.fStatus=1 AND act.fStatus=1
          </WhereClause>
4

4 に答える 4

3

ANDを使用して、(Where 句 pr.fActive=1...) のような他の条件を相対的な左結合句で配置してみてください

例...

LEFT JOIN tblprogram pr ON cuprxref.ixprogram = pr.ixprogram AND pr.fActive=1 AND pr.fDeleted=0

うまくいけば、これは役に立ちます。

于 2013-02-18T09:31:20.290 に答える
2

Where句でこれを確認してください:

 cu.fStatus=1 OR ( pr.fActive=1 AND pr.fDeleted=0 AND wp.fStatus=1 AND act.fStatus=1)
于 2013-02-18T10:09:16.017 に答える
2

のため、LEFT JOIN結合されていない場合、右側の部分は NULL になります。

これを試して:

cu.fStatus=1
        AND (pr.fActive=1 OR pr.fActive IS NULL)
        AND (pr.fDeleted=0 OR pr.fDeleted IS NULL)
        AND ...
于 2013-02-18T09:31:57.343 に答える
2

ネストされたクエリを試すことはできませんか:

このようなもの、

SELECT finalMap.ixCustomer,finalMap.ixprogram, finalMap.ixWorkPackage,
FROM customer t
left outer join
(SELECT t.ixCustomer,cpRef.ixprogram, cpRef.ixWorkPackage
 FROM customerprogramxref t
left outer join
(SELECT pRef.ixprogram, pRef.ixWorkPackage FROM tblprogram pr
left outer join
(SELECT t.ixprogram,w.ixWorkPackage FROM programworkpackagexref t
left outer join
(SELECT wpa.ixWorkPackage FROM workpackage w
left outer join
(SELECT wpactxref.ixWorkPackage FROM workpackageactivityxref wpactxref
left outer join (SELECT t.ixactivity FROM activity t where t.fStatus=1) act
on act.ixactivity=wpactxref.ixactivity) wpa on w.ixworkpackage =wpa.ixworkpackage
where w.fStatus=1) w  on t.ixWorkPackage = w.ixWorkPackage) pRef
on pr.ixprogram = pRef.ixprogram
where pr.fActive=1  AND pr.fDeleted=0)cpRef
on t.ixprogram=cpRef.ixprogram)finalMap
on t.ixCustomer=finalMap.ixCustomer
where t.fStatus=1;
于 2013-02-18T11:46:45.920 に答える