Я не могу понять работу подзапроса. Когда я использую запрос sql с прерванным подзапросом, вместо выдачи ошибки он возвращает результаты.
Схема:
CREATE TABLE `file_data` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`status` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'UNRECOGNISED',
`file_url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`error_file_url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`file_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`id`))
ENGINE=InnoDB AUTO_INCREMENT=5 AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ;
Тестовые данные:
insert into file_data values (1,now(),"abc1","xyz1",now(),now(),"T1");
insert into file_data values (2,now(),"abc2","xyz2",now(),now(),"T1");
insert into file_data values (3,now(),"abc3","xyz3",now(),now(),"T2");
insert into file_data values (4,now(),"abc4","xyz4",now(),now(),"T2");
Когда я пытаюсь выполнить следующий запрос, он возвращает ошибку:
select id from file_data group by file_type;
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'file_center.file_data.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Но когда я запускаю тот же запрос внутри подзапроса, он возвращает результаты вместо выдачи ошибки:
select * from file_data where id in (select id from file_data group by file_type);
+----+---------------------+----------+----------------+---------------------+---------------------+-----------+
| id | status | file_url | error_file_url | created_at | updated_at | file_type |
+----+---------------------+----------+----------------+---------------------+---------------------+-----------+
| 1 | 2020-01-10 15:57:37 | abc1 | xyz1 | 2020-01-10 15:57:37 | 2020-01-10 15:57:37 | T1 |
| 2 | 2020-01-10 15:57:37 | abc2 | xyz2 | 2020-01-10 15:57:37 | 2020-01-10 15:57:37 | T1 |
| 3 | 2020-01-10 15:57:37 | abc3 | xyz3 | 2020-01-10 15:57:37 | 2020-01-10 15:57:37 | T2 |
| 4 | 2020-01-10 15:57:37 | abc4 | xyz4 | 2020-01-10 15:57:37 | 2020-01-10 15:57:37 | T2 |
+----+---------------------+----------+----------------+---------------------+---------------------+-----------+
I Я не могу понять это поведение. Может кто-нибудь объяснить, почему запрос работает, даже если подзапрос не удается?