2013-04-30 108 views

回答

3

Oracle沒有使用CASE或者像MySQL的簡寫方式。因此,你將不得不使用一個CASE內您sum

select p.id, p.name, 
    t.id as toyid, 
    t.name as toyname 
from person p 
inner join toys t on p.id = t.person_id 
inner join 
(
    select person_id 
    from toys 
    group by person_id 
    having sum(case when name = 'hat' then 1 else 0 end) > 0 and 
    sum(case when name = 'doll' then 1 else 0 end) > 0 
) t2 
    on p.id = t2.person_id; 

SQL Fiddle with Demo

+0

THX,這是偉大的....你有,如果是大規模更好的意見,你的!或者[這個sqlfiddle](http://sqlfiddle.com/#!6/aed4a/5) – bmw0128 2013-04-30 20:27:13

+0

@ bmw0128對不起,我不確定什麼性能會更好,你將不得不做一些測試。 – Taryn 2013-04-30 20:29:40

+0

我從來沒有測試過返回相同結果的不同SQL。你的意思是使用一個能給執行時間的工具,如果是的話,有沒有想法,如果蟾蜍這樣做?我想我需要一個重要的數據集來獲得準確的結果?只是想知道一般用來比較返回相同數據集的SQL。 – bmw0128 2013-04-30 20:35:34