左加入时> 0行,但不匹配where子句

时间:2014-04-16 17:46:15

标签: sql sql-server

所以我有一个查询,如果表中没有匹配的连接,它显示零,这就是我想要的。但是,如果有匹配的行,但它们与where子句中的行不匹配,我不会得到零,我什么也得不到。

SELECT  *
FROM    PUEvents PUE1
OUTER APPLY (
              SELECT    day
              FROM      Day_Map
              WHERE     Date = '2014-04-12'
            ) D1
OUTER APPLY (
              SELECT    date
              FROM      Day_Map
              WHERE     Day = D1.Day AND
                        Year = '2013' AND
                        MapID > 976
            ) D2
LEFT JOIN PUConsumerData PUC ON PUC.EventID = PUE1.EventID
WHERE   PUE1.EventID > 4958 AND
        PUE1.EventId < 5023 AND
        PUE1.TourID = 353 AND
        (
          CONVERT(DATE, PUC.PictureTakenDate) = '2014-04-12' OR
          PUC.PictureTakenDate IS NULL
        ) AND
        (
          PUC.FirstName <> 'ZOOM' OR
          FirstName IS NULL
        )
ORDER BY PUE1.Name

因此对于第51行,数据库中有行甚至是偶数但不是日期范围,所以我没有得到事件数据。我需要事件数据,因为没有匹配的消费者数据。

1 个答案:

答案 0 :(得分:0)

aaron-betrand是正确的,如果我将WHERE子句中的条件移动到JOIN它工作正常。简单