Sql 在联接表中选择具有一个特定项(但不是另一个特定项)的元组

Sql 在联接表中选择具有一个特定项(但不是另一个特定项)的元组,sql,Sql,给定以下数据定义: create table vikings( name varchar(256)); create table countries( name varchar(256)); create table homes( viking varchar(256), country varchar(256)); INSERT INTO vikings VALUES ('Rollo'); INSERT INTO vikings VALUES ('Floki'); INS

给定以下数据定义:

create table vikings(
  name varchar(256));

create table countries(
  name varchar(256));

create table homes(
  viking varchar(256),
  country varchar(256));

INSERT INTO vikings VALUES ('Rollo');
INSERT INTO vikings VALUES ('Floki');
INSERT INTO vikings VALUES ('Egill');
INSERT INTO vikings VALUES ('Eirikr');

INSERT INTO countries VALUES ('Iceland');
INSERT INTO countries VALUES ('Norway');
INSERT INTO countries VALUES ('Sweden');
INSERT INTO countries VALUES ('Faroes');

INSERT INTO homes VALUES ('Rollo', 'Norway');
INSERT INTO homes VALUES ('Floki', 'Norway');
INSERT INTO homes VALUES ('Floki', 'Sweden');
INSERT INTO homes VALUES ('Egill', 'Iceland');
INSERT INTO homes VALUES ('Egill', 'Sweden');
INSERT INTO homes VALUES ('Eirikr', 'Iceland');
INSERT INTO homes VALUES ('Eirikr', 'Faroes');
在SQL中如何表达以下查询

“给我所有在挪威或冰岛有房子的维京人,但不是瑞典或法罗群岛”


我已经设置了一个SQLFIDLE,可以在这里使用它:

您需要的基本上是一组差异。显示在挪威或冰岛拥有房屋的维京人集合的所有成员,并减去在瑞典或法罗群岛拥有房屋的维京人集合

您的SQL FIDLE被设置为使用MySQL,我认为MySQL不支持
操作符,但通常这些查询都会给出相同的结果:

select viking from homes where country in ('Norway', 'Iceland')
except
select viking from homes where country in ('Sweden', 'Faroes')

select viking from homes 
where country in ('Norway', 'Iceland')
and viking not in (
    select viking from homes where country in ('Sweden', 'Faroes')
    ) 

两个查询都将以
Rollo
作为单一匹配项。

您希望维京人只有两个家,其中至少有一个家是挪威或Iecland,而不是瑞典或法罗群岛?谢谢!我试图找出连接的不同组合,这使事情变得过于复杂。嗯。