Sql 查询将每行显示两次

Sql 查询将每行显示两次,sql,sql-server-2008,Sql,Sql Server 2008,每行显示两次。。。我写它是为了从不同的表中选取一些行,它显示了我想要的,但它显示了这些行两次,每一次。为什么? SELECT tbluser.fullname, tbluser.email, tblJobAdv.advtitle, tblPersonalInfo.country, tblPersonalInfo.city, tblJobOffer.digitalsignature FROM tblUser LEFT JOIN tblPersonalInfo ON t

每行显示两次。。。我写它是为了从不同的表中选取一些行,它显示了我想要的,但它显示了这些行两次,每一次。为什么?

SELECT
   tbluser.fullname, tbluser.email, tblJobAdv.advtitle, tblPersonalInfo.country, 
   tblPersonalInfo.city, tblJobOffer.digitalsignature 
FROM
   tblUser 
LEFT JOIN
   tblPersonalInfo ON tblUser.userid = tblPersonalInfo.userid
LEFT JOIN
   tblApplication ON tblApplication.userid = tblUser.userid 
LEFT JOIN
   tblJobAdv ON tblJobAdv.advid = tblApplication.advid
LEFT JOIN
   tblJobOffer ON tblUser.userid = tblJobOffer.userid
WHERE
   tblJobAdv.userId IN (SELECT userid FROM tblUser WHERE email = 'h@y.com')

您只需对记录进行分组区分即可(删除重复项)


您只需对记录进行分组区分即可(删除重复项)


它显示重复的记录,因为您是沿着不同的维度连接的。如果我不得不猜测的话,根据表名,用户正在申请多个工作

一个简单快捷的解决方法是执行
选择distinct


实际上,您应该检查基础表,以确保其中没有重复项。我对申请表有怀疑。我认为一个给定的用户可能有多个应用程序。

它显示重复的记录,因为您是沿着不同的维度加入的。如果我不得不猜测的话,根据表名,用户正在申请多个工作

一个简单快捷的解决方法是执行
选择distinct


实际上,您应该检查基础表,以确保其中没有重复项。我对申请表有怀疑。我认为一个给定的用户可能有多个应用程序。

请尝试选择distinct以避免重复记录

请尝试选择distinct以避免重复记录

使用“分组依据”或“distinct”会使您的查询变得缓慢和低效。 我认为您最好从其他表(如tblJobAdv)中查找重复的行, 并且为这些表提供更多的“where条件”。

SELECT tbluser.fullname, tbluser.email, tblJobAdv.advtitle, tblPersonalInfo.country, 
   tblPersonalInfo.city, tblJobOffer.digitalsignature 
FROM
   tblUser 
LEFT JOIN
   tblPersonalInfo ON tblUser.userid = tblPersonalInfo.userid
LEFT JOIN
   tblApplication ON tblApplication.userid = tblUser.userid 
LEFT JOIN
   tblJobAdv 
   ON tblJobAdv.advid = tblApplication.advid
   AND tblJobAdv.isUsable = 'Usable' /* some more where condition example */
LEFT JOIN
   tblJobOffer ON tblUser.userid = tblJobOffer.userid
WHERE
   tblJobAdv.userId IN (SELECT userid FROM tblUser WHERE email = 'h@y.com')

使用“groupby”或“distinct”会使查询速度慢且效率低。 我认为您最好从其他表(如tblJobAdv)中查找重复的行, 并且为这些表提供更多的“where条件”。

SELECT tbluser.fullname, tbluser.email, tblJobAdv.advtitle, tblPersonalInfo.country, 
   tblPersonalInfo.city, tblJobOffer.digitalsignature 
FROM
   tblUser 
LEFT JOIN
   tblPersonalInfo ON tblUser.userid = tblPersonalInfo.userid
LEFT JOIN
   tblApplication ON tblApplication.userid = tblUser.userid 
LEFT JOIN
   tblJobAdv 
   ON tblJobAdv.advid = tblApplication.advid
   AND tblJobAdv.isUsable = 'Usable' /* some more where condition example */
LEFT JOIN
   tblJobOffer ON tblUser.userid = tblJobOffer.userid
WHERE
   tblJobAdv.userId IN (SELECT userid FROM tblUser WHERE email = 'h@y.com')

好了,兄弟,完成了,但为什么会这样?有什么特别的原因吗?我告诉你们兄弟,例如第一行的id=1,联接表有两行的id为1。所以当你们联接两个表时,你们会得到两行正确的??明白了还是我再解释一下?@HunainHafeez兄弟接受了答案。这对我很有帮助:)我正在搜索“接受”按钮,但无法:(\n我是Stackoverflow的新手,helpok bro,完成了,但为什么会这样?有什么特别的原因吗?我告诉你兄弟,例如,第一行的id=1,联接表有两行的id。所以当你联接两个表时,你会得到两行正确的结果??明白了,还是让我再解释一下?@HunainHafeez bro接受答案。这对我很有帮助e:)我正在搜索接受按钮,但无法:(\n我是Stackoverflow的新手,请帮助