1

表:

国家
--------
PK CountryID

姓名

城市
--------
PK CityID

FK CountryID

姓名

飞机场
--------
PK机场ID

FK CityID

姓名

我的任务是选择没有机场的国家的名称。

我可以想象只有一种解决方案,除了(或减号)

SELECT Country.Name 
FROM Country EXCEPT (SELECT DISTINCT Country.Name FROM Country, City, Airport 
WHERE City.CountryID = Country.CountryID AND Airport.CityID = City.CityID); 

但是是否可以不使用 EXCEPT 而使用 IS NULL 之类的东西?

4

3 回答 3

4
SELECT cn.CountryID 
  FROM Country cn
  LEFT JOIN City ct ON cn.CountryID = ct.CountryID
  LEFT JOIN Airport ar on ar.CityID=ct.CityID
 WHERE ar.AirportID is null
于 2013-11-11T12:15:27.563 回答
2

如果您需要使用IS NULL以下查询进行此查询:

SQLFiddle 演示

select ct.CountryId,max(ct.Name) from Country ct
left join City c on ct.CountryId=c.CountryId
left join Airport a on a.CityId=c.CityID
group by ct.CountryId
HAVING max(a.AirportID) IS NULL
于 2013-11-11T12:33:12.237 回答
1

您可以使用它,但它基本上与您使用不同的语法相同。

SELECT Country.Name 
FROM Country 
Where Country.Name Not IN 
    (
        SELECT DISTINCT Country.Name FROM Country, City, Airport 
        WHERE City.CountryID = Country.CountryID AND Airport.CityID = City.CityID
    );
于 2013-11-11T12:15:57.400 回答