0

各行を2回表示します...異なるテーブルからいくつかの行を選択するように書きましたが、必要なものが表示されますが、それらの行がそれぞれ2回表示されます。なぜ ?

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')
4

4 に答える 4

3

異なるディメンションに沿って結合しているため、重複したレコードが表示されます。テーブル名から推測すると、ユーザーは複数の仕事に応募しています。

迅速かつ簡単な修正は、行うことですselect distinct

実際には、基になるテーブルをチェックして、テーブルに重複がないことを確認する必要があります。Application テーブルについて疑問があります。特定のユーザーに対して複数のアプリケーションが存在する可能性があると思います。

于 2012-12-30T16:04:22.537 に答える
1

「group by」または「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')
于 2012-12-31T06:17:31.387 に答える
0

レコードをグループ化するか、個別に行う必要があります(重複を削除します)。

Select distinct 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')
于 2012-12-30T16:04:07.183 に答える
0

レコードの重複を避けるために、個別の選択を試してください

于 2012-12-30T16:04:44.360 に答える