2012-08-04 128 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