FULL JOIN在两个方面不起作用

时间:2014-01-31 08:50:06

标签: sql join

我试图在SQL中编写一个FULL JOIN语句,但它并没有像我想的那样正常工作。 这是我的完整陈述

 SELECT 
        t.tacNom, bh.heuresChiffrees, 
        SUM(ISNULL(heures,0)) + SUM(ISNULL(minutes,0)/60) as HeuresRealisee, (ISNULL(bh.heuresChiffrees,0) - (SUM(ISNULL(heures,0)) + (SUM(ISNULL(minutes,0))/60))) as Solde,
        (SUM(DISTINCT minutes)%60) as Soldeminutes
    FROM tbl_BalanceHeures bh
            FULL OUTER JOIN tbl_HeuresTimbrage_new ht ON  ht.idProjet = bh.proIdProjetExterne 
            AND ht.idxTache = bh.idxTache 
            AND ht.idxDep= bh.idxDepartement
            INNER JOIN tbl_Taches t on t.idTache = bh.idxTache
            WHERE proIdProjetExterne = '00Z 000104' AND bh.idxDepartement = 184
    GROUP BY  t.tacNom ,bh.heuresChiffrees

以下是声明的结果

idTache heuresChiffrees HeuresRealisee  Solde
332              25                 0        25  
330              50                 0        50
327             100                42    58
331             100                23    77

以下是我的表tbl_Balance中的记录和语句

select t.idTache, bh.heuresChiffrees
from tbl_BalanceHeures bh
INNER JOIN tbl_Taches t on t.idTache = bh.idxTache
WHERE proIdProjetExterne= '00Z 000104' AND bh.idxDepartement = 184

idTache heuresChiffrees
330      50
331     100
327     100
332      25

以下是tbl_HeuresTimbrage中的记录和声明

 Select t.idTache, ht.heures as heuresRealisees
 From tbl_HeuresTimbrage_new ht
  INNER JOIN tbl_Taches t on t.idTache = ht.idxTache
 WHERE idProjet= '00Z 000104' AND ht.idxDep = 184

  idTache   heuresRealisees
    327               32
    331               23
    327               10
    334               4

所以,在我的FULL JOIN声明中,我应该找到

IdTache  heuresChiffrees Heures Realisees
327       100           10
330       50          NULL (or 0)
331       100           23
332       25          NULL (or 0)
334     NULL(or 0)    4

我试图将我的WHERE子句放在Full JOIN中,但它没有工作

1 个答案:

答案 0 :(得分:0)

这很可能是因为你的WHERE条款。它作用于连接结果,因此如果A方为空,则会消除这些行。

您可以将其更改为连接的条件,如下所示:

FROM A 
FULL OUTER JOIN B  
ON  B.idProjet = A.proIdProjetExterne 
AND B.idxTache = A.idxTache 
AND B.idxDep= A.idxDepartement
AND A.proIdProjetExterne =  'xxx' 
AND A.idxDepartement = 184

但是,如果没有看到您的实际数据或架构,这是一个猜测......