Нет необходимости использовать подзапрос или вложенный запрос.Вы можете просто сгруппировать поле Year
и использовать HAVING COUNT(Year)=1
, чтобы найти необходимые строки.Таким образом, применимым запросом будет:
SELECT Year, Event
FROM table_name
GROUP BY Year
HAVING COUNT(Year)=1
Образец исполняемого решения можно найти по адресу:
http://sqlfiddle.com/#!9/b47044/11
Логика: КогдаВы группируете по Year
, он объединяет все строки с одинаковым годом.Таким образом, количество будет 2
для 2011
.
Вы можете проверить это, выполнив:
SELECT Year, Event, COUNT(Year) as event_count
FROM table_name
GROUP BY Year
Вы можете увидеть этот промежуточный шаг в выполнении по адресу: http://sqlfiddle.com/#!9/b47044/10
Это решение выше будет толькоработа для версии MySQL <5.7.Для более высоких версий найдите решение ниже. </strong>
Для версии 5.7 и выше режим SQL ONLY_FULL_GROUP_BY включен по умолчанию, поэтому это не удастся.Либо вы можете обновить этот режим (см. Ответы в Список SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец .... несовместим с sql_mode = only_full_group_by ), либо вы можете использовать функцию ANY_VALUE()
для ссылки нанеагрегированный столбец, поэтому запрос на обновление, который будет работать в MySQL 5.7 и более поздних версиях:
SELECT Year, ANY_VALUE(Event)
FROM table_name
GROUP BY Year
HAVING COUNT(Year)=1;
Пример исполняемого файла можно найти по адресу: https://paiza.io/projects/e/tU-7cUoy3hQUk2A7tFfVJg
Ссылка: https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/miscellaneous-functions.html#function_any-value