在 MySQL 中从其中一个表中选择 MAX(differ_key) 来连接特定键上的 2 个表 [重复]

Posted

技术标签:

【中文标题】在 MySQL 中从其中一个表中选择 MAX(differ_key) 来连接特定键上的 2 个表 [重复]【英文标题】:Joining 2 tables on a specific key with selecting MAX(different_key) from one of them in MySQL [duplicate] 【发布时间】:2021-01-13 11:38:53 【问题描述】:

我正在编辑文本,并将原始和编辑后的文本逐句存储在两个单独的表中,如下所示:

(原件)

SENTENCE
id (auto increment, primary)
url_id (refers to the URL of given copy)
sentence (longtext)

(审阅副本)

SENTENCE_REVIEW
id (auto increment, primary)
sentence_id (this should refer to the id in the SENTENCE table)
url_id (see as before - this might be redundant here, but that's not important for now)
sentence_review (longtext)

这个想法是任何给定的句子都可以有无限数量的评论,具有最高 SENTENCE_REVIEW.id 的评论被认为是最后一个。

我想要做的是从SENTENCE 表中选择引用给定url_idall_the_sentences,同时选择所有“最终”(如: MAX(id)) 编辑了 SENTENCE_REVIEW 表中的句子,其中句子被编辑。

如果句子没有被编辑,并且 sentence_id 不存在于 SENTENCE_REVIEW 表中,我只希望这些句子在这些列为空的情况下返回,但仍作为来自 @987654329 的值返回@表。

这最后一步是我卡住的地方。

我试过了:

SELECT sentence.id, sentence.url_id, sentence_review.sentence_id, sentence, MAX(sentence_review.id), sentence_review FROM sentence   
LEFT OUTER JOIN sentence_review
ON sentence.id = sentence_review.sentence_id
GROUP BY sentence_review.sentence_id
ORDER BY sentence.id

它带有所有已编辑句子的所有“最终”版本,但不是未编辑的句子。我尝试了所有我能想到的JOIN,但都无济于事。

我错过了什么?

谢谢,

【问题讨论】:

前两个重复,icates 是精确的(加入另一个表并从那里获取组内最大值的记录)。第三个副本一般解释了如何在组中选择具有最大值的记录。 【参考方案1】:

您想为每个句子带来最新的评论。一种选择使用left join 和窗口函数:

select s.*, sr.sentence_review
from sentence s
left join (
    select sr.*, row_number() over(partition by sentence_id order by id desc) rn
    from sentence_review sr
) sr on sr.sentence_id = s.sentence_id and s.rn = 1

不过,这需要 mysql 8.0。在早期版本中,您可以使用相关子查询进行过滤:

select s.*, sr.sentence_review
from sentence s
left join sentence_review sr 
    on  sr.sentence_id = s.sentence_id
    and sr.id = (
        select max(sr1.id)
        from sentence_review sr1
        where sr1.sentence_id = sr.sentence_id
    )

【讨论】:

正是我所追求的。我用的是第二版,谢谢!

以上是关于在 MySQL 中从其中一个表中选择 MAX(differ_key) 来连接特定键上的 2 个表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在一个查询中从两个 mysql 表中选择数据

在MySQL中从表中随机选择一行

Mysql通过ID从另一个表中删除一个表

从 MySQL 查询中从百万行中选择第 N 条记录

MySQL 从连接表中选择 MAX 日期

如何从 MySQL 表中选择消息列表?