2017-04-17 56 views
0

也许你可以帮助我。我实际上在ORACLE平台上学习SQL,我有几个练习。Oracle SQL SELECT相当于多个AND

其中之一是对我来说很难,我不把它做完吧...

这是锻炼; Tibial: 哪个国家的成员是在所有的组织,哪里还国家XY是成员的?

我有多个表,但我认为只有一个是必要的这项任务。

表名:isMember(缩写(FK),国家(FK))

所以表的样子:

Country /Abbreviation 
    USA / G-5 
    USA / G-7 
    USA / G-9 
    Canada/ G-7 
    Canada/ G-9 
    Norway/ G-20 

等等....

我怎样才能找到列表中的每个国家也是例如美国所属的所有组织的成员?

非常感谢!

+0

'哪国的成员在所有的组织,哪里还国家XY是'。所以,在你的例子中,如果XY Country是USA,那么其他国家都不应该输出。它是否正确 ? –

+0

你好Oto,是的,在我的例子中是正确的,没有哪个国家可以匹配。也许不是最好的例子,但我认为很清楚。 – eneR

回答

0

这是一个棘手的问题。一种方法是构建与国家和组织在美国是所有行然后,计算每个国家都有数,看它们是否匹配。

select c.country 
from (select distinct country from isMember) c cross join 
    (select abbreviation from isMember where country = 'USA') a left join 
    isMember im 
    on im.country = c.country and im.abbreviation = a.abbreviation 
group by c.country 
having count(*) = count(im.country); -- do all organizations match? 
+0

您好Gordon,我检查了您发布的SQL代码。我认为它没有像预期的那样工作。我总是只能找到与之相比的国家。以您的代码为例,美国。 – eneR

+0

@eneR。 。 。在你的样本数据中,没有一个国家是美国所有组织的成员。因此,只有获得美国才是不足为奇的。 –