联接表达式不支持内部联接和左联接查询

时间:2019-02-12 21:28:07

标签: sql left-join inner-join

即使我的tbl_planned中没有某些日期的数据,我仍试图让查询提取数据以包含一个tbl_actual中的所有日期。

但是当同时使用我的内部联接和我的左联接时,就是说不支持左联接。

我尝试使用两个内部联接代替左联接,但这仍然仅从tbl_planned查询中提取日期,我也需要从tbl_actual获取所有日期

SELECT cal.Day, planned.LocalDay, actual.LocDay, actual.Over30Minutes, 
actual.Over30MinutesHours, actual.NumOfUses, actual.TotalDurationTaken, 
planned.Campaign, planned.Supervisor, planned.DurationScheduled, 
actual.PersonID, planned.PersonID


FROM (tbl_actual AS actual INNER JOIN tbl_planned AS planned ON 
(planned.PersonID = actual.PersonID)) Left Join tbl_actual ON actual.LocDay 
= planned.LocalDay

2 个答案:

答案 0 :(得分:1)

  

即使我的tbl_planned中没有某些日期的数据,我仍试图让查询提取数据以包含一个tbl_actual中的所有日期。

在SQL中,这可以表示为tbl_actual LEFT JOIN tbl_planned,后跟联接条件(日期和人)。 tbl_actual中与tbl_planned中不匹配的记录仍将包含在输出中,与tbl_planned相关的所有列均显示NULL

我想您的查询可以简化如下:

SELECT 
    -- cal.Day,
    planned.LocalDay,
    actual.LocDay,
    actual.Over30Minutes, 
    actual.Over30MinutesHours, 
    actual.NumOfUses, 
    actual.TotalDurationTaken, 
    planned.Campaign, 
    planned.Supervisor, 
    planned.DurationScheduled, 
    actual.PersonID, 
    planned.PersonID
FROM 
    bl_actual AS actual
    LEFT JOIN tbl_planned 
        ON  planned.PersonID = actual.PersonID
        AND actual.LocDay    = planned.LocalDay

PS:什么是表别名cal,如结果集第一列cal.Day所示?在查询中的任何地方都没有声明此别名,我在该列中将其注释掉。

答案 1 :(得分:0)

我认为您只想引用tbl_actual

FROM tbl_actual AS actual INNER JOIN
     tbl_planned AS planned
     ON planned.PersonID = actual.PersonID AND
        actual.LocDay = planned.LocalDay