Oracle SQL SELECT等效于多个和

Oracle SQL SELECT等效于多个和,sql,oracle,join,relational-division,Sql,Oracle,Join,Relational Division,也许你能帮我。我实际上是在ORACLE平台上学习SQL的,我有几个练习 其中一个对我来说很难,我没有把它做好 这是练习: 哪些国家是所有组织的成员,哪些国家也是XY的成员 我有多个表,但我认为这项任务只需要一个表 表名:isMember(缩写(fk),国家(fk)) 所以这些表看起来像: Country / Abbreviation USA / G-5 USA / G-7 USA / G-9 Canada /

也许你能帮我。我实际上是在ORACLE平台上学习SQL的,我有几个练习

其中一个对我来说很难,我没有把它做好

这是练习: 哪些国家是所有组织的成员,哪些国家也是XY的成员

我有多个表,但我认为这项任务只需要一个表

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

所以这些表看起来像:

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

我如何才能找到列表中的每个国家,这些国家也是所有组织的成员,例如美国是这些组织的成员


多谢各位

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

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?

哪些国家是所有组织的成员,其中XY国家也是
。所以,在你的例子中,如果XY国家是美国,那么其他国家都不应该输出。这是正确的吗?你好,Oto,是的,正确的,在我的例子中没有匹配的国家。也许不是最好的例子,但我认为这很清楚。你好,戈登,我已经检查了你发布的SQL代码。我认为它不像预期的那样工作。我总是发现只有我比较的国家。在您的代码中,例如美国。@eneR。在您的样本数据中,没有一个国家是美国所有组织的成员。所以,只得到美国并不奇怪。