我正在尝试将一些数据连接到几个表。我有一个审计表,用于存储用户执行的操作的审计。我试图按照他们拥有的审核次数和审核次数来获取用户列表。我有以下查询:
<system.web>
<authentication mode="Windows" />
</system.web>
此查询将在审计表中为每个条目提供1行。我只想要每个用户1行,审计表中的条目数按审计次数排序。
有没有办法做到这一点。当我尝试在上述查询中包含SELECT s.user_created,
u.first_name,
u.last_name,
u.email,
a.message as audits
FROM cbrain_school s
inner join ugrp_user u on s.user_created = u.user_id
inner join audit a on u.user_id = a.user_id
order by u.created_time desc;
答案 0 :(得分:0)
首先,您要加入表格s.user_created
。为什么?您没有从此表中选择任何数据(u.user_id
除外,它只是cbrain_school.user_created
)。我想你想限制用户显示EXISTS
?然后使用IN
或select u.user_id, u.first_name, u.last_name, u.email, a.message as audits
from ugrp_user u
inner join audit a on u.user_id = a.user_id
where u.user_id in (select user_created from cbrain_school)
order by u.created_time desc;
进行查找。
cbrain_school.user_created
这显示select u.user_id, u.first_name, u.last_name, u.email, a.cnt
from ugrp_user u
inner join
(
select user_id, count(*) as cnt
from audit
group by user_id
) a on u.user_id = a.user_id
where u.user_id in (select user_created from cbrain_school)
order by u.created_time desc;
仅仅是标准。 (但是查询结果当然是相同的。)当你对连接的行不感兴趣时,避免连接是个好习惯。
现在您不想再显示每条消息,而只是按用户计算它们。因此,加入消息时,您应该加入消息计数:
{{1}}
(您也可以加入所有邮件,然后才聚合,但我不建议这样做。它适用于此和许多其他查询,但在使用多个表时容易出错,您可能突然计算或在汇总之前加入一个很好的习惯。)