2013-11-11 3 views
1

Таблицы:SQL запрос - IS NULL

 
Country 
------- 
PK CountryID 

Name 

City 
------- 
PK CityID 

FK CountryID 

Name 

Airport 
-------- 
PK AirportID 

FK CityID 

Name 

Моя задача состоит в том, чтобы выбрать названия стран, которые не имеют аэропорта.

Я могу представить только одно решение с КРОМЕ (или МИНУС)

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

Но можно не использовать КРОМЕ но что-то вроде IS NULL?

+1

Конечно .. внешнее соединение с нулевой проверке должен работать. –

ответ

2

Если вам нужно сделать этот запрос с IS NULL Ьгу следующий запрос:

SQLFiddle demo

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 
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 
+0

Я думаю, что этот запрос также возвращает страны, в которых существуют аэропорты, а также города без аэропортов. – valex

+0

Спасибо Valex, спасибо, что указали мою ошибку. +1 для вашего правильного ответа. – Pradeeshnarayan

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 
    ); 
Смежные вопросы