Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我无法获得预期的输出?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 为什么我无法获得预期的输出?

Sql 为什么我无法获得预期的输出?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试从下面的代码中检索学生数据。但实际产出与预期产出不同。我按照以下要求编写了连接条件 要求: 主要代码-在STU_ID、AWD_DEG_CD、DEG_AWD_TERM_CD和DEG_SEQ_NUM上将SR0DAT连接到SR0PST 毕业生进度数据收集-加入毕业生进度数据实用程序 专业化代码-在STU_ID、AWD_DEG_CD、DEG_AWD_TERM_CD和DEG_SEQ_NUM上将SR0DAT连接到SR0SZT,其中SR0SZT.COLL_CD'',并在STU ID、COLL_CD

我正在尝试从下面的代码中检索学生数据。但实际产出与预期产出不同。我按照以下要求编写了连接条件

要求:

  • 主要代码-在STU_ID、AWD_DEG_CD、DEG_AWD_TERM_CD和DEG_SEQ_NUM上将SR0DAT连接到SR0PST
  • 毕业生进度数据收集-加入毕业生进度数据实用程序
  • 专业化代码-在STU_ID、AWD_DEG_CD、DEG_AWD_TERM_CD和DEG_SEQ_NUM上将SR0DAT连接到SR0SZT,其中SR0SZT.COLL_CD'',并在STU ID、COLL_CD、MAJOR__CD、DEG_CD和PROG_STU TERM上将SR0SZT连接到SR0PST
我的代码是

select *   
from dbo.SR0DAT dt  
left join dbo.SR0PST pt on dt.STU_ID = pt.STU_ID
                        and  dt.AWD_DEG_CD = pt.AWD_DEG_CD
                        and  dt.DEG_AWD_TERM_CD = pt.DEG_AWD_TERM_CD
                        and  dt.DEG_SEQ_NUM = pt.DEG_SEQ_NUM
left join dbo.SR0GPT gt on dt.STU_ID = gt.STU_ID
left join dbo.SR0SZT zt on dt.STU_ID = zt.STU_ID
                        and dt.AWD_DEG_CD = zt.AWD_DEG_CD
                        and dt.DEG_SEQ_NUM = zt.DEG_SEQ_NUM
                        and dt.DEG_AWD_TERM_CD = zt.DEG_AWD_TERM_CD
                        and pt.STU_ID = zt.STU_ID
                        and pt.COLL_CD = zt.COLL_CD
                        and pt.MAJOR_CD = zt.MAJOR_CD
                        and pt.DEG_CD = zt.DEG_CD
                        and pt.PROG_STRT_TERM = zt.PROG_STRT_TERM
where dt.STU_ID = '303001849'
  and zt.COLL_CD ! = ' '
我是否使用了正确的连接语法?谁能帮帮我吗

谢谢大家的快速回复。很抱歉没有提及这些。实际和预期o/p如下所述

expected:
    303001849   05S AB      1   0780    LS  AB      66F     NULL    NULL    NULL
    303001849   09S MA      1   0249    GD  MA      94F     NULL    NULL    NULL
    303001849   12W PHD     1   0249    GD  PHD     94F 11W 2011-01-10 00:00:00.000 NULL    NULL


Actual:
STU_ID  DEG_AWD_TERM_CD AWD_DEG_CD  DEG_SEQ_NUM MAJOR_CD    COLL_CD DEG_CD  PROG_STRT_TERM  ADV_CAND_TERM_CD    ADV_CAND_DT SPCL_CD SPCL_STRT_TERM
303001849   05S AB      1   0780    LS  AB      66F     NULL    NULL    NULL
303001849   05S AB      1   0780    LS  AB      66F 11W 2011-01-10 00:00:00.000 NULL    NULL
303001849   09S MA      1   0249    GD  MA      94F     NULL    NULL    NULL
303001849   09S MA      1   0249    GD  MA      94F 11W 2011-01-10 00:00:00.000 NULL    NULL
303001849   12W PHD     1   0249    GD  PHD     94F     NULL    NULL    NULL
303001849   12W PHD     1   0249    GD  PHD     94F 11W 2011-01-10 00:00:00.000 NULL    NULL

回答是因为我无法添加评论,但肖恩·兰格用左连接将其锁定。您为每个记录获取重复条目的原因是,其中一条记录的时间戳值为空,而另一条记录的时间戳值为空。你可以用任何一种

将排除空结果的内部联接。风险在于,如果时间戳应该为空,并且您希望以任何方式显示记录,那么它们将被排除在外

左连接,其中时间戳不为null。这将只连接时间戳不为null的条目,但是如果没有这样的条目,它将返回一个null行


不管怎样,我都会检查您的数据结构。如果这是一个一次性查询,您应该可以,但如果定期使用,那么您可能会得到一对多的关系,这可能会导致更多重复行。

回答,因为我无法添加注释,但Sean Lange用左连接将其固定。您为每个记录获取重复条目的原因是,其中一条记录的时间戳值为空,而另一条记录的时间戳值为空。你可以用任何一种

将排除空结果的内部联接。风险在于,如果时间戳应该为空,并且您希望以任何方式显示记录,那么它们将被排除在外

左连接,其中时间戳不为null。这将只连接时间戳不为null的条目,但是如果没有这样的条目,它将返回一个null行


不管怎样,我都会检查您的数据结构。如果这是一个一次性查询,您应该可以,但如果定期使用,那么您可能会得到一对多的关系,这可能会导致更多重复行。

我没有看到任何语法或逻辑上不正确的地方。然而,对于表定义或至少是对错误的解释,任何人在这里都无能为力。您需要解释诸如“实际输出与预期输出不同”之类的事情。是不是多排了?少一点,但要考虑的一件事。您有一个left join zt,但是您的where谓词改变了它,这样它就不会返回不匹配的行,因为NULL在join中的工作方式。它既不是=也不是!=如果Sean的评论没有给出您的答案,请尝试发布几行示例数据、该数据的预期输出和该数据的实际输出。(您可以清除或忽略任何敏感信息。)在看不到实际结果与预期结果之间的差异的情况下,我们通常只能找到语法错误。请尝试内部连接而不是左连接谢谢jamie,我试过了,但没有给出准确的答案。我没有发现任何语法或逻辑上的错误。然而,对于表定义或至少是对错误的解释,任何人在这里都无能为力。您需要解释诸如“实际输出与预期输出不同”之类的事情。是不是多排了?少一点,但要考虑的一件事。您有一个left join zt,但是您的where谓词改变了它,这样它就不会返回不匹配的行,因为NULL在join中的工作方式。它既不是=也不是!=如果Sean的评论没有给出您的答案,请尝试发布几行示例数据、该数据的预期输出和该数据的实际输出。(您可以清除或忽略任何敏感信息。)在看不到实际结果与预期结果之间的差异的情况下,我们通常只能找到语法错误。请尝试内部连接而不是左连接谢谢jamie,我尝试过,但没有给出准确的结果