2014-01-07 51 views
2

下面的查詢工作 - EXCEPT - 它正在爲vehicle_id返回NULL值。我不希望vehicle_id有任何空值的記錄。避免此LEFT JOIN上的空記錄

由於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

那麼,爲什麼你不使用'INNER JOIN'那裏呢? – Lamak

+1

您可以將'v.Vehicl_Id IS NOT NULL'添加到'WHERE'子句並過濾沒有車輛ID的行。 – user2989408

回答

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

WHERE條款,添加:

AND v.Vehicl_Id IS NOT NULL 

應該這樣做。