避免此LEFT JOIN上的NULL记录

时间:2014-01-07 20:00:34

标签: sql sql-server

下面的查询有效 - 例外 - 它为vehicle_id返回NULL值。我不希望任何对vehicle_id有任何记录的记录。

由于vehicle_id与fund_series绑在一起,这对我来说很复杂。

当我在WHERE下面有vehicle_id条件时,查询无效。任何可以提供帮助的SQL天才吗?

我将MIN()聚合函数放在那里,这样我就可以让GROUP BY工作了。

    SELECT DISTINCT
           MIN(ml.pretty_file_name),
           ml.filename,
           MIN(ml.issued_date),
           MIN(mr.rule_name),
           MIN(mlob.line_of_business_name),
           MIN(mt.media_type_name),
           MAX(v.vehicle_name) 
   FROM Media_Live ml
       JOIN Media_Type mt
           ON mt.media_type_id = ml.media_type_id
       JOIN Media_Rule mr
           ON mr.rule_id = ml.rule_id
       JOIN Media_Line_Of_Business mlob 
           ON mlob.line_of_business_id = ml.line_of_business_id 
       LEFT JOIN Fund_Class_Media fcm
           ON fcm.media_id=ml.media_id
       LEFT JOIN Fund_Class_Live fc
           ON fc.fund_class_id = fcm.fund_class_id
       LEFT JOIN Fund_Series fs
           ON fs.fund_series_id = fc.fund_series_id
       LEFT JOIN Vehicle AS v
           ON v.vehicle_id=fs.vehicle_id AND /*THIS IS WHERE IM GETTING NULLS*/
           ( 
           v.vehicle_id = 1
           OR v.vehicle_id = 2
           OR v.vehicle_id = 5
           )
       LEFT JOIN Media_Media_Tag AS mmt ON mmt.media_id=ml.media_id
       LEFT JOIN Media_Tag AS mtag ON mtag.tag_id=mmt.tag_id
   WHERE
       (/*people can search with terms for fc*/
        --fc.fund_class_id LIKE '%'+replace(?,' ','%')+'%' 
       )
       ( 
           mt.media_type_id = 33
           OR mt.media_type_id = 1
           OR mt.media_type_id = 12
       )
       AND
       (
           mr.rule_id = 3
           OR mr.rule_id = 9
       )
       AND
       (
           mtag.tag_name != 'exclude_web_lit_center'
       )
   GROUP BY ml.filename

2 个答案:

答案 0 :(得分:1)

这是左连接所做的,允许空值。只需取出左连接部分,使其成为内连接。

JOIN Vehicle AS v ON v.vehicle_id=fs.vehicle_id AND v.vehicle_id IN (1,2,5)

你冷也这样做,但我不明白为什么你会这样做:

LEFT JOIN Vehicle AS v ON v.vehicle_id=fs.vehicle_id AND ISNULL(v.vehicle_id,0) IN (1,2,5)

答案 1 :(得分:-1)

WHERE子句中,添加:

AND v.Vehicl_Id IS NOT NULL

应该这样做。