我现在正在努力处理以下 SQL 查询:
http://sqlfiddle.com/#!4/736a7/12
select uc.*
from usercredential uc
inner join users u on u.userid = uc.userid
inner join credential c on c.credentialid = uc.credentialid
inner join healthsystemcredential hsc on hsc.credentialid = c.credentialid
inner join accesslevel ac on hsc.hscredentialid in (
-- Trying to figure out how to filter here?
select 1 from dual
)
where c.fulfillmentmethod = 'Attach'
and c.display = 1
and uc.auditstatus <> 0
and ( (uc.auditstatus is null) or (uc.auditstatus = 1 and uc.lastmodified > uc.auditdate) )
基本上,我试图获得与凭据多对一的 UserCredential。凭证与 HealthSystemCredential 是一对多的。
HealthSystemCredential 具有 AccessLevel 的外键,但是 HealthSystemCredential 中的此 AccessLevel 列实际上是最低允许访问级别。AccessLevel 记录的类型等级介于最低的 1 和最高的 4 之间。
示例:当我按类型为 2、3 或 4 的 AccessLevels 过滤查询时,应获取具有 Type Rank 为 2 的 AccessLevel 记录的 HealthSystemCredential。
问题是我无法在一个查询中弄清楚如何做到这一点。有什么方法可以让我在 AccessLevels 的子查询中获取 DENSE_RANK 列,在子查询中应用我的过滤器并将其以某种方式加入到表中,以提供我想要的所有适用的 HealthSystemCredentials?