2012-08-04 129 views
0

我需要简化下面的查询尽可能多地或者通过使用连接或任何其他方式...SQL查询简化

select polid 
    from polver 
    where idmkey = 'idm3' 
    and polid in (select polid 
        from polver 
        where idmkey = 'idm2' 
         and polid in (select polid 
             from polver 
             where idmkey='idm1')); 
+0

为什么你需要那个?知道这一点很重要。 – usr 2012-08-04 14:05:29

+0

@usr - 看起来该表允许1:多个或多个:polid和idmkey之间的多个。因此,op需要所有与所有三个idmkeys'('idm1','idm2','idm3')'相关的polid。尽管OP尚未澄清,但令人遗憾。 – MatBailie 2012-08-04 14:06:49

+0

嘿德姆斯,你正是那个我想要得到的结果。你有更好的查询这种情况。? – 2012-08-04 14:09:50

回答

3

您可以通过使用一组:

select polid 
from polver 
group by 
     polid 
having max(case when idmkey = 'idm1' then 1 end) = 1 
     and max(case when idmkey = 'idm2' then 1 end) = 1 
     and max(case when idmkey = 'idm3' then 1 end) = 1 
+0

它不工作,我在msaccess查询生成器executin。 – 2012-08-04 14:54:09

+0

在ms-access中,替换'idmkey ='idm1'然后1个结尾'的情况,并带有'iif(idmkey ='idm1',1,0)' – Andomar 2012-08-04 16:12:06

3
select polid from polver 
where idmkey in ('idm1', 'idm2', 'idm3') 
group by polid 
having count(distinct idmkey) = 3 
+1

如果一个polid与多次相同的idmkey值关联会怎么样? – MatBailie 2012-08-04 14:07:23

+1

'count(distinct idmkey)= 3'会修复 – Andomar 2012-08-04 14:07:58

+0

谢谢你的提示。 – 2012-08-04 14:08:27