2013-04-30 73 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