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的新手,请帮助