在sql中使用左外连接过滤记录

时间:2016-02-10 07:12:34

标签: sql sql-server tsql

我正在使用以下SQL左外连接来获取数据:

SELECT resource_name, un_diary_apps.date_app_start, un_diary_apps.date_app_end
FROM un_diary_resources
LEFT OUTER JOIN un_diary_apps
    ON resource_sequence = un_diary_resources.sequence
WHERE un_diary_apps.date_app_start BETWEEN '2014-09-24 00:00:00' AND '2014-09-24 23:59:59'

和out put是enter image description here

当我应用日期范围时,它会在这些日期显示记录。我想要所有的resource_name,即使他们在这些日期范围内有约会。

2 个答案:

答案 0 :(得分:2)

每当您在left join WHEREclauseNULL的右侧指定值时,您必须消除所有NULL 1}}值,它基本上变成inner join.

USE AND子句代替WHERE

select resource_name,un_diary_apps.date_app_start,un_diary_apps.date_app_end from un_diary_resources 
left outer join un_diary_apps 
on (resource_sequence = un_diary_resources.sequence
AND un_diary_apps.date_app_start BETWEEN '2014-09-24 00:00:00'
AND '2014-09-24 23:59:59')

答案 1 :(得分:0)

SELECT r.resource_name, apps.date_app_start, apps.date_app_end
FROM un_diary_resources r
LEFT OUTER JOIN 
(
    SELECT a.resource_sequence, a.date_app_start, a.date_app_end 
    FROM un_diary_apps a
    WHERE a.date_app_start BETWEEN '2014-09-24 00:00:00' AND '2014-09-24 23:59:59'
) AS apps
ON r.sequence = apps.resource_sequence
相关问题