Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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_Tsql - Fatal编程技术网

为什么SQL查询返回重复项?

为什么SQL查询返回重复项?,sql,tsql,Sql,Tsql,我有以下疑问。奇怪的是,它为同一个人返回多个记录——但它应该为每个人只返回一行。它是基于contact1c的所有左连接,每个单独的contact1c只有一行,而其他列有时为同一个单独的contact1c有多行 select C.ACCOUNTNO as 'AdmitGold Account', C2.UNAMEFIRST as 'First Name', C2.UNAMELAST as 'Last Name', C.KEY1 as 'Status', C.KEY4 as 'P

我有以下疑问。奇怪的是,它为同一个人返回多个记录——但它应该为每个人只返回一行。它是基于contact1c的所有左连接,每个单独的contact1c只有一行,而其他列有时为同一个单独的contact1c有多行

    select 
 C.ACCOUNTNO as 'AdmitGold Account',
 C2.UNAMEFIRST as 'First Name',
 C2.UNAMELAST as 'Last Name',
 C.KEY1 as 'Status',
 C.KEY4 as 'People ID',
 C.KEY3 as 'Type',
 C.KEY5 as 'Counselor',
 C.CITY as 'City',
 C.STATE as 'State',
 C.SOURCE as 'Source',
 C.DEPARTMENT as 'Major',
 C2.UGENDER as 'Gender',
 C2.UETHNICBG as 'Ethnicity',
 C2.UFULLPART as 'Full/Part',
 SLF_CLG_CS.EXT as 'College - GPA',
 OFF_CLG_CS.EXT as 'College - GPA Official',
 HS_OFF_CS.LINKACCT as 'HS GPA - Official',
 OFF_SAT_COMP.LINKACCT as 'SAT - Verbal',
 OFF_SAT_COMP.COUNTRY as 'SAT - Math',
 (Cast(OFF_SAT_COMP.LINKACCT as float) + Cast(OFF_SAT_COMP.COUNTRY as float)) as 'SAT - Composite',
 OFF_SAT_COMP.EXT as 'SAT - Essay',
 OFF_ACT_COMP.LINKACCT as 'ACT - English',
 OFF_ACT_COMP.COUNTRY as 'ACT - Math',
 OFF_ACT_COMP.ZIP as 'ACT - Reading',
 OFF_ACT_COMP.EXT as 'ACT - ScRe',
 (Cast(OFF_ACT_COMP.LINKACCT as float) + Cast(OFF_ACT_COMP.COUNTRY as float)+ Cast(OFF_ACT_COMP.ZIP as float) + Cast(OFF_ACT_COMP.EXT as float)) as 'ACT - Official' 
     from contact1 C
 left join CONTACT2 C2 on C.ACCOUNTNO=C2.ACCOUNTNO
 left join CONTSUPP HS_OFF_CS on C.ACCOUNTNO=HS_OFF_CS.ACCOUNTNO
  AND HS_OFF_CS.STATE='O' AND HS_OFF_CS.CONTACT='High School'
 left join CONTSUPP SLF_CLG_CS on C.ACCOUNTNO=SLF_CLG_CS.ACCOUNTNO
  AND SLF_CLG_CS.CONTACT = 'Transfer College' AND SLF_CLG_CS.STATE='S'
 left join CONTSUPP OFF_CLG_CS on C.ACCOUNTNO=OFF_CLG_CS.ACCOUNTNO
  AND OFF_CLG_CS.CONTACT = 'Transfer College' AND OFF_CLG_CS.STATE='O'
 left join CONTSUPP OFF_SAT_COMP on C.ACCOUNTNO=OFF_SAT_COMP.ACCOUNTNO
  AND OFF_SAT_COMP.CONTACT='Test/SAT' AND OFF_SAT_COMP.ZIP='O'
 left join CONTSUPP OFF_ACT_COMP on C.ACCOUNTNO=OFF_ACT_COMP.ACCOUNTNO
  AND OFF_ACT_COMP.CONTACT='Test/ACT' AND OFF_ACT_COMP.STATE='O'
     where 
 C.KEY1!='00PRSP' 
 AND C.U_KEY2='2010 FALL'

左联接将在一对多关系中产生重复项。无论第一个表中有多少条记录,如果将join留给第一个表中每条记录都有多行的表,则将得到多行。如果所有列的行实际上都是重复的,则选择Distinct将删除重复项,但不会消除在任何列中具有不同值的“重复项”。

如果您在服务器上显示了计划权限,则快速识别重复项的来源-添加where子句(例如,其中C.ACCOUNTNO='some value'),您希望返回一行(但您已确定该值实际返回>1行),启用“包括实际执行计划”,运行查询并将鼠标悬停在计划各阶段之间的链接上-在某个点上,您会发现>1条记录来自某个特定阶段,查看此阶段的详细信息可以了解重复的原因。

请查看是否可以获得正确的格式…刚刚更新…已将其全部格式化,然后重新堆叠设定它。我认为复制品来自于这样一个事实,即不同层次的学校教育都与联系记录联系在一起。例如,任何想上大学的人都会有高中/GED……谢谢。这很有帮助……但选择不同的学校并不能解决问题。我有没有办法让它不做这种复制品?我在拉绳子确切信息。从我想要的其他行…@davemackey-如果Select Distinct没有删除重复项,那么它们在技术上不是重复项。如果查看结果集,就会发现某些行在一列或另一列中有所不同。如果从任何辅助表中选择标识列,这就足够了。否则,它表示在某些辅助表的列中存在不同的数据值。