我有一个数据库,我必须得到评论的名称在哪里是相关评论,我还需要获得发表评论的人的用户名。
为了做到这一点,我必须通过5个表,因为评论表jamacomments
没有直接连接到评论表review
。
我可以通过以下方式获得评论名称:
revision_user
与jamacomments userbase
revision
,这是刚刚更新的评论review
我的SQL查询:
select jamacomment.id, jamacomment.userId, jamacomment.commentText,
userbase.id, userbase.userName,
revision_user.userId, revision_user.revisionId,
revision.id, revision.reviewId, review.id, review.name
from jamacomment
left join revision_user
on jamacomment.userId=revision_user.userId
left join userbase
on revision_user.userId=userbase.id
left join revision
on revision_user.revisionId=revision.id
left join review
on revision.reviewId=review.id
group by jamacomment.id
可能会更清楚地澄清一些事情:
所以我可以从jamacomment到revision_user从修订版到修订版再到修订版。
它留下了太多记录,它复制了一些数据,但并不完整。这是一个重复的特定点,它给出了随机的revisionId数字,其余的数据也是错误的。
使用group by
我只选择唯一的jamacomment.id,因为只有那么多行才会有评论。但是它会以我想要的错误记录来检索我。它显示了一些正确的行,但有些数据不是注释数据,而是不同的注释数据。
也许我有错误的选择或错误的左连接或我应该使用其他类型的连接,无论如何,我可以使用任何帮助,以获得每个评论的正确数据。
添加带有数据的虚拟表以便更好地理解
table 'userbase' table 'jamacomment'
id | userName id | userId | commentText
1 | Peter 1 | 2 | First comment review1
2 | Jack 2 | 2 | Second comment review1
3 | Ann 3 | 1 | Comment in first review
4 | 1 | Comment in second review
5 | 1 | Comm in 2nd review 2nd revision
6 | 3 | Comment in review1 2nd revision
table 'revision_user' table 'revision' table 'review'
userId | revisionId id | reviewId | sequence id | name
2 | 1 1 | 1 | 1 1 | review1
2 | 1 2 | 2 | 1 2 | review2
1 | 1 3 | 1 | 2
1 | 2 4 | 2 | 2
1 | 4
3 | 3
预期结果应为:
table 'jamacomment' 'userbase' 'revision_user' 'revision' 'review'
id|userId |commentText |id |userName |userId |revisionId |id |reviewId |sequence|id|name
1 |2 |First comment review1 |2 |Jack |2 |1 |1 |1 |1 |1 |review1
2 |2 |Second comment review1 |2 |Jack |2 |1 |1 |1 |1 |1 |review1
3 |1 |Comment in first review |1 |Peter |1 |1 |1 |1 |1 |1 |review1
4 |1 |Comment in second review |1 |Peter |1 |2 |2 |2 |1 |2 |review2
5 |1 |Comm in 2nd review 2nd revision |1 |Peter |1 |4 |4 |2 |4 |2 |review2
6 |3 |Comment in review1 2nd revision |3 |Ann |3 |3 |3 |1 |2 |1 |review1
忘记添加信息,它应该在revisionId的某个地方断开,它将数据的副本复制到revisionId但在revisionId中将id更改为这些行。它为每个项目添加了3个重复项。其余信息指的是不正确的revisionId。我认为它有3个重复,因为我有3个评论或3个修订,一个评论。
它显示了128条没有分组的记录。 with group by显示正确的36条记录,但它会得到一些正确的记录和一些不正确的记录。
答案 0 :(得分:0)
如果您只想获得在您加入的桌子上找到的匹配记录,则左连接将使用内部联接填充您的结果。