SQL联接-联接17个表-不显示数据的列

SQL联接-联接17个表-不显示数据的列,sql,join,left-join,inner-join,union-all,Sql,Join,Left Join,Inner Join,Union All,上面是一个数据库的部分数据图,我想从中查询几个字段。“tPlanningPeriodText”和“TSUBlanningPeriodText”表中的数据返回NULL。我该如何解决这个问题?此表的链接(联接)是否未“到达”它 以下是查询: 另外,这不是我的数据库,我只是想从中查询数据 SELECT T2.GlobalEmpCode "Global Employee Code", T2.EmpCode "Employee Code", T3.LastName "Last Name", T

上面是一个数据库的部分数据图,我想从中查询几个字段。“tPlanningPeriodText”和“TSUBlanningPeriodText”表中的数据返回NULL。我该如何解决这个问题?此表的链接(联接)是否未“到达”它

以下是查询: 另外,这不是我的数据库,我只是想从中查询数据

SELECT  T2.GlobalEmpCode "Global Employee Code", T2.EmpCode "Employee Code", T3.LastName "Last Name", 
    T3.FirstName "First Name", T3.LastName + ',' + T3.FirstName "Full Name", T1.CompletePercent "Completition (%)", 
    T5.Email, T9.Title "Program", T7.Title "Goal", T6.TargetUnitDesc "Unit", T11.Title "Position Title", T15.Code "Planning Period", 
    T17.Code "Sub-Planning Period"
FROM tEmployeePlan AS T1
    LEFT JOIN tEmployee AS T2 ON T1.PID=T2.PID
    LEFT JOIN tPerson AS T3 ON T2.PID=T3.PID
    LEFT JOIN tIdentity AS T4 ON T3.PID=T4.PID
    LEFT JOIN tUser AS T5 ON T4.UserID=T5.UserID
    LEFT JOIN tGoal AS T6 ON T1.PID = T6.ProposalPID
    LEFT JOIN tGoalText AS T7 ON T6.GoalID = T7.GoalTID
    LEFT JOIN tProgram AS T8 ON T1.PgmID = T8.PgmID
    LEFT JOIN tProgramText AS T9 ON T8.PgmID = T9.PgmID
    LEFT JOIN tEmployeePlanPosition AS T10 ON T1.EmpPlanID = T10.EmpPlanID
    LEFT JOIN tEmployeePlanPositionText AS T11 ON T10.EmpPlanID = T11.EmpPlanID

    LEFT JOIN tGoalCatalogItem AS T12 ON T6.GoalID = T12.GoalID
    LEFT JOIN tGoalCatalog AS T13 ON T12.GoalCatalogID = T13.GoalCatalogID
    LEFT JOIN tPlanningPeriod AS T14 ON T13.PlanPerID = T14.PlanPerID
    LEFT JOIN tPlanningPeriodText AS T15 ON T14.PlanPerID = T15.PlanPerID
    LEFT JOIN tSubPlanningPeriod AS T16 ON T14.PlanPerID = T16.PlanPerID
    LEFT JOIN tSubPlanningPeriodText AS T17 ON T16.SubPlanPerID = T17.SubPlanPerID

ORDER BY GlobalEmpCode;
选择不同的T2.GlobalEmpCode“全局员工代码”、T2.EmpCode“员工代码”、T3.LastName“姓氏”,
T3.FirstName“名字”,T3.LastName+,“+T3.FirstName”全名,
--在3个业务单元级别(即部门、科室、部门)之间选择案例陈述
“除法”=T35.UnitTreeTypeID=-1和T35.Level=1时的情况,然后是T30.Code END,
“节”=T35.UnitTreeTypeID=-1和T35.Level=2时的情况,然后是T30.Code END,
“部门”=T35.UnitTreeTypeID=-1和T35.Level=3时的情况,然后是T30.Code END,
T1.完成百分比“完成率(%)”,
--根据完成百分比制定计划状态的案例说明
“状态”=T1.CompletePercent=0时的情况,然后为“未启动”
当T1.CompletePercent=20时,则为“草稿”
当T1.CompletePercent=40时,则表示“同意”
当T1.CompletePercent=60时,则“同意”
当T1.CompletePercent=80时,则“评估”
当T1.CompletePercent=100时,则为“已完成”
完,,
T5.电子邮件,T9.标题“计划”,T7.标题“目标”,T24.全球代码“目标类别”,T6.目标单元描述“单元”,T11.标题“职位”,T13.代码“计划期”,
T23.代码“子计划期”,T15.LastName+,'+T15.FirstName“计划所有者”
从tEmployeePlan作为T1
在T1上以T2的形式左连接Temploye。PID=T2.PID
左连接tPerson作为T2上的T3。PID=T3.PID
在T3上作为T4左连接实体。PID=T4.PID
在T4上以T5的形式左键连接tUser。UserID=T5.UserID
左连接tGoal作为T1上的T6。PID=T6.ProposalPID
将tGoalText作为T7在T6上左连接。GoalID=T7.GoalTID
将tGoalCategory作为T6上的T24左连接。GoalCatID=T24.GoalCatID
左连接t程序作为T1.PgmID=T8.PgmID上的T8
在T8.PgmID=T9.PgmID上以T9的形式左键连接程序文本
左连接模板EEPLAN位置为T1上的T10。EmpPlanID=T10.EmpPlanID
左连接模板EEPLANpositionText作为T10上的T11。EmpPlanID=T11.EmpPlanID
左连接t计划周期作为T8上的T12.PlanPerID=T12.PlanPerID
左连接t计划周期文本作为T12上的T13.PlanPerID=T13.PlanPerID
左连接TsubPlanningPeriod文本作为T12上的T23.PlanPerID=T23.SubPlanPerID
在T1.emplanid=T14.emplanid上将tEmployeePlanOwner作为T14左连接
--验证
T14.PlanOwnerTypeID=-1——直接人员(主管)
和T14.OwnerPID-1——个人不是直接的
在T14.OwnerPID=T15.PID上左键连接tPerson作为T15
左连接tSlot作为T2.PID上的T25=T25.PID
和T25.IsPrimaryPos=1
和T25.PosID-1
左连接t位置为T25上的T26.PosID=T26.PosID
和T26.PosID-1
在T26.PosID=T27.PosID上左连接tPositionUnit作为T27
和T27.UnitTreeTypeID=-1
在T27.UnitID=T28.UnitID上按T28左连接突尼斯
左连接突尼斯类型为T28上的T35.UnitTypeID=T35.UnitTypeID
在T28.UnitTypeID=T29.UnitTypeID上以T29的形式左连接tUnitTypeText
左侧连接突尼斯文本,如T28上的T30.UnitID=T30.UnitID
T30.IsDefault=1
按T2.GlobalEmpCode排序;

LEFT JOIN通常会为右侧的表返回一些NULL。我对一些NULL没有意见,我甚至希望是这样,问题是没有不包含NULL值的记录,table.column确实有valuesHard要回答,而没有看到数据。我会尝试选择tEmployee,加入tGoal,加入tGoalCatalogItem,看看你是否得到了你想要的。如果是这样,则一次添加一个联接,直到看到意外的空值出现。@Ramollo问题可能在于您对
tGoal T6
的联接。您的图表没有显示tGoal中的所有字段,但您确定要
T6。ProposalPID
?ProposalPID是两个表之间关系中使用的字段。
SELECT DISTINCT T2.GlobalEmpCode "Global Employee Code", T2.EmpCode "Employee Code", T3.LastName "Last Name", 
    T3.FirstName "First Name", T3.LastName + ',' + T3.FirstName "Full Name",

    --CASE statement picking between 3 business unit levels i.e. division, section, department
    "Division" = CASE WHEN T35.UnitTreeTypeID = -1 AND T35.Level = 1 THEN T30.Code END, 
    "Section" = CASE WHEN T35.UnitTreeTypeID = -1 AND T35.Level = 2 THEN T30.Code END, 
    "Department" = CASE WHEN T35.UnitTreeTypeID = -1 AND T35.Level = 3 THEN T30.Code END, 

    T1.CompletePercent "Completition (%)",

    --CASE statement to formulate plan status as per completion percentage
    "Status" = CASE WHEN T1.CompletePercent = 0 THEN 'Not Started'
                    WHEN T1.CompletePercent = 20 THEN 'Draft'
                    WHEN T1.CompletePercent = 40 THEN 'Agreement'
                    WHEN T1.CompletePercent = 60 THEN 'Agreed'
                    WHEN T1.CompletePercent = 80 THEN 'Evaluation'
                    WHEN T1.CompletePercent = 100 THEN 'Completed'
                END,

    T5.Email, T9.Title "Program", T7.Title "Goal",T24.GlobalCode "Goal Category", T6.TargetUnitDesc "Unit", T11.Title "Position Title", T13.Code "Planning Period",
    T23.Code "Sub-Planning Period", T15.LastName + ',' + T15.FirstName "Plan Owner"
FROM tEmployeePlan AS T1
    LEFT JOIN tEmployee AS T2 ON T1.PID=T2.PID
    LEFT JOIN tPerson AS T3 ON T2.PID=T3.PID
    LEFT JOIN tIdentity AS T4 ON T3.PID=T4.PID
    LEFT JOIN tUser AS T5 ON T4.UserID=T5.UserID
    LEFT JOIN tGoal AS T6 ON T1.PID = T6.ProposalPID
    LEFT JOIN tGoalText AS T7 ON T6.GoalID = T7.GoalTID
    LEFT JOIN tGoalCategory AS T24 ON T6.GoalCatID = T24.GoalCatID
    LEFT JOIN tProgram AS T8 ON T1.PgmID = T8.PgmID
    LEFT JOIN tProgramText AS T9 ON T8.PgmID = T9.PgmID 
    LEFT JOIN tEmployeePlanPosition AS T10 ON T1.EmpPlanID = T10.EmpPlanID
    LEFT JOIN tEmployeePlanPositionText AS T11 ON T10.EmpPlanID = T11.EmpPlanID
    LEFT JOIN tPlanningPeriod AS T12 ON T8.PlanPerID = T12.PlanPerID
    LEFT JOIN tPlanningPeriodText AS T13 ON T12.PlanPerID = T13.PlanPerID
    LEFT JOIN tSubPlanningPeriodText AS T23 ON T12.PlanPerID = T23.SubPlanPerID
    LEFT JOIN tEmployeePlanOwner AS T14 ON T1.EmpPlanID = T14.EmpPlanID
        --validation
        AND T14.PlanOwnerTypeID = -1 --person direct (supervisor)
        AND T14.OwnerPID <> -1 --person not direct
    LEFT JOIN tPerson AS T15 ON T14.OwnerPID = T15.PID
    LEFT JOIN tSlot AS T25 ON T2.PID = T25.PID
        AND T25.IsPrimaryPos = 1
        AND T25.PosID <> -1
    LEFT JOIN tPosition AS T26 ON T25.PosID = T26.PosID
        AND T26.PosID <> -1
    LEFT JOIN tPositionUnit AS T27 ON T26.PosID = T27.PosID
        AND T27.UnitTreeTypeID = -1
    LEFT JOIN tUnit AS T28 ON T27.UnitID = T28.UnitID
    LEFT JOIN tUnitType AS T35 ON T28.UnitTypeID = T35.UnitTypeID
    LEFT JOIN tUnitTypeText AS T29 ON T28.UnitTypeID = T29.UnitTypeID
    LEFT JOIN tUnitText AS T30 ON T28.UnitID = T30.UnitID
        AND T30.IsDefault = 1
ORDER BY T2.GlobalEmpCode;