gpt4 book ai didi

mysql - 选择 5 个表创建几乎重复的行

转载 作者:行者123 更新时间:2023-11-29 23:46:53 24 4
gpt4 key购买 nike

我有一个数据库,我必须获取评论的名称,相关评论在哪里,我还需要获取发表该评论的人的用户名。

为了做到这一点,我必须检查 5 个表,因为从评论表 jamacomments 到评论表 review 没有直接连接。

我可以通过以下方式获取评论名称:

  • 使用 jamacomments 连接表 revision_user
  • 然后将 revision_user 表与 user 表连接 userbase
  • 然后将 revision_user 表与刚刚更新的 review 修订表 revision 连接起来
  • 然后将修订表与审阅表连接审阅

我的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.userId 是外键 userbase.id
  • revision_user.userId 是 userbase.id 的外键(因此与 jamacomment.userId 相同)
  • revision_user.revisionId 是 revision.id 的外键
  • revision.reviewId 是 review.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 条评论或 1 条评论有 3 个修订。

它显示了 128 条没有分组依据的记录。使用 group by 它显示了正确的 36 条记录,但它得到了一些正确的记录和一些不正确的记录。

最佳答案

左联接将填充您的结果,如果您只想获取要联接的表中找到的匹配记录,请尝试使用内联接。

关于mysql - 选择 5 个表创建几乎重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com