gpt4 book ai didi

mysql - 加入 2 个表(一对多)并在第二个表中获取最新条目

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:20 25 4
gpt4 key购买 nike

假设我有两个表,“users”和“audit”,每当用户的状态发生变化时,审计表就会由触发器填充。我正在尝试从两个表中进行选择,并获取具有关联的最新审核条目的用户条目(唯一)。假设表格具有以下字段:

用户:

  • 编号
  • 用户名
  • 电子邮件
  • 状态

审计:

  • id(只是一个任意的自动增量)
  • user_id (fk)
  • 新状态
  • created_at(发生的日期/时间)

因此,对于每个用户条目,都有多个审核条目。

所以,最终我需要说出结果(其中斜体部分是审计结果,非斜体部分是 mysql 结果集中行的用户部分):
1,约翰,john@gmail.com,10,5,1,10,2012-08-10-10:15:59
等等

现在,我能看到的唯一方法是进行复合选择,我会做类似的事情:SELECT U.*, (SELECT * FROM audit A2 where A2.id = max(A.id)) FROM users U left join audit A on (U.id = A.user_id);

问题是,如果您在用户中有数千甚至数十万个结果,您将在数据库内部执行 n+1 次查询 - 这确实效率低下。

关于如何在不使用复合 SELECTS 的情况下将其编写为一个 SQL 语句的任何想法?

最佳答案

我假设总是有一个相应的审计条目,因此使用了 INNER JOIN。还假设同一用户没有两个具有相同 created_at 日期的审计条目。

select u.id, u.username, u.email, u.status, 
a.id, a.new_status, a.created_at
from users u
inner join (
select user_id, max(created_at) as MaxCreated
from audit
group by user_id
) am on u.id = am.user_id
inner join audit a on am.user_id = a.user_id and am.MaxCreated = a.created_at

关于mysql - 加入 2 个表(一对多)并在第二个表中获取最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905728/

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