Sar*_*rel 2 mysql sql database
假设我有两个表,"users"和"audit",每次用户的状态发生变化时,触发器都会填充审计表.我正在尝试从两个表中进行选择,并获得具有关联的最新审计条目的用户条目(唯一).假设表格包含以下字段:
用户:
审计:
因此,对于每个用户条目,有多个审计条目.
所以,最终我需要说结果(斜体部分是审计结果,非斜体是mysql结果集中行的用户部分):
1,john,john @ gmail.com ,10,5,1,10,2012-08-10-10:15:59
等
现在,我能看到的唯一方法是做复合选择,我做的事情如下:SELECT U.*,(SELECT*FROM audit A2其中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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1130 次 |
| 最近记录: |