在sql中使用左外部联接筛选记录
我正在使用以下SQL左外部联接获取数据:在sql中使用左外部联接筛选记录,sql,sql-server,tsql,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 BETWEE
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'
而出局的是
当我应用日期范围时,它会显示这些日期中的记录。我想要所有资源的名称,即使他们是否在这些日期范围内有约会。每当您在
WHERE
子句中指定左连接的右侧的值时(该值不是NULL
),您必须消除所有的NULL
值,它本质上成为一个内部连接。
使用和
子句代替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')
Left join似乎是在结果集中始终获取所有resource\u name
记录的正确策略,并且屏幕截图似乎在正确的轨道上。那么你的问题是什么?
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