Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 避免此左联接上的空记录_Sql_Sql Server - Fatal编程技术网

Sql 避免此左联接上的空记录

Sql 避免此左联接上的空记录,sql,sql-server,Sql,Sql Server,下面的查询有效-除了-它返回车辆id的空值。我不希望任何车辆id为空的记录 由于vehicle_id与fund_系列绑定,这对我来说很复杂 当我将车辆id条件置于WHERE下方时,查询不起作用。有没有SQL天才可以帮忙 我把MIN()聚合函数放在那里,这样我就可以让小组工作了 SELECT DISTINCT MIN(ml.pretty_file_name), ml.filename, MIN(ml.issued_date)

下面的查询有效-除了-它返回车辆id的空值。我不希望任何车辆id为空的记录

由于vehicle_id与fund_系列绑定,这对我来说很复杂

当我将车辆id条件置于WHERE下方时,查询不起作用。有没有SQL天才可以帮忙

我把MIN()聚合函数放在那里,这样我就可以让小组工作了

    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

WHERE
子句中,添加:

AND v.Vehicl_Id IS NOT NULL

应该可以了。

这就是左连接的作用,允许空值。只需取出左侧连接部分,使其成为内部连接

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)

那么,为什么不在那里使用
内部联接
呢?可以将
v.vehicle\u Id不为NULL
添加到
WHERE
子句中,并过滤没有车辆Id的行。