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