Подзапрос в упражнении WHERE - PullRequest
2 голосов
/ 11 июля 2019

У меня есть таблица миграции с атрибутами (имя, год отъезда) и таблица аистов с атрибутами (имя, год рождения).Я хочу написать запрос, содержащий имена всех аистов, перенесенных до рождения самого младшего аиста в 2002 году (используя таблицу миграции в основном запросе и таблицу Stork в подзапросе предложения WHERE).NB. Не разрешается использовать такие предложения, как WHERE, GROUP BY, ORDER BY, LIMIT, если только это не является необходимым / обязательным

Migration table
Name        DEPARTURE YEAR   
Annamarie   2001   
Felix       2002
Annamarie   2003
Felix       2004
Jonas       2001

Stork table
Name       YEAROFBIRTH
Annamarie   1998
Felix       1999
Max         2000
Jonas       2001
Christina   2002

Использование оператора DISTINCT дает желаемый результат с 15 именами, удаляя DISTINCTОператор дает мне 25 имен с дубликатами

SELECT DISTINCT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR IN(SELECT stork.YEAROFBIRTH
FROM stork
WHERE stork.YEAROFBIRTH <2002)

Я ожидаю получить 15 имен без использования оператора DISTINCT

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Просто следуя желаемому результату и вашему примеру использования буквального года;это должно быть все, что вам нужно.

SELECT DISTINCT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR < 2002
;

Однако, если вы не хотите использовать буквальный год, подзапрос можно использовать для его определения следующим образом:

SELECT DISTINCT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR < (SELECT MAX(stork.YEAROFBIRTH) FROM stork)
;
0 голосов
/ 11 июля 2019

Попробуйте это-

SELECT NAME -- You can apply DISTINCT if required 
FROM Migration
WHERE Name IN (
    SELECT Name FROM Stork
    WHERE YEAROFBIRTH < 2002
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...