Как отобразить владельцев Ford, которые не владеют Ferarris в SQL - PullRequest
0 голосов
/ 24 сентября 2010

Я изучаю SQL, и я написал запрос, который возвращает всех владельцев Фордов. Как изменить запрос, чтобы он не возвращал никого, кто владеет Ford и Ferarri?

SELECT  DISTINCT Owns.Pid
FROM (Person INNER JOIN Owns ON Person.Pid= Owns.Pid) INNER JOIN Car ON Owns.Cid=Car.Cid
WHERE Car.Manufacturer = 'Ford' 

Добавлено:

Я попробовал следующий код, чтобы посмотреть, смогу ли я создать людей, которые не владеют Ferarris, но он создает пустой лист данных. Есть идеи, что с ним не так?

SELECT  DISTINCT Owns.Pid
FROM (Person INNER JOIN Owns ON Person.Pid= Owns.Pid) INNER JOIN Car ON Owns.Cid=Car.Cid
WHERE NOT EXISTS
(SELECT  Owns.Pid
FROM (Person INNER JOIN Owns ON Person.Pid= Owns.Pid) INNER JOIN Car ON Owns.Cid=Car.Cid
WHERE Car.Manufacturer = 'Ferarri' )

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Поскольку это помеченное домашнее задание, вот несколько советов:

  • Найдите идентификаторы всех лиц, владеющих Ferrari (должны быть практически идентичны вашему первоначальному запросу)
  • Используйте этот запрос в подзапросе (или объедините), чтобы исключить их из исходного запроса
0 голосов
/ 24 сентября 2010
SELECT 

  FORDOWNERS.PID

FROM 

  (SELECT  DISTINCT Owns.Pid
  FROM (Person INNER JOIN Owns ON Person.Pid= Owns.Pid) INNER JOIN Car ON Owns.Cid=Car.Cid
  WHERE Car.Manufacturer = 'Ford') AS FORDOWNERS

INNER JOIN 

  (SELECT  DISTINCT Owns.Pid
  FROM (Person INNER JOIN Owns ON Person.Pid= Owns.Pid) INNER JOIN Car ON Owns.Cid=Car.Cid
  WHERE Car.Manufacturer = 'Ferrari') AS FERRARIOWNERS

ON FORDOWNERS.PID = FERRARIOWNERS.PID

или как это

SELECT 

  OWNS.PID

FROM 

  Person INNER JOIN Owns ON Person.Pid= Owns.Pid INNER JOIN Car ON Owns.Cid=Car.Cid
  WHERE Car.Manufacturer = 'Ford'
  AND OWNS.PID IN (SELECT  DISTINCT Owns.Pid
                   FROM (Person INNER JOIN Owns ON Person.Pid= Owns.Pid) INNER JOIN Car ON Owns.Cid=Car.Cid
                   WHERE Car.Manufacturer = 'Ferrari')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...