Sql запрос, возвращающий результат со сломанным подзапросом - PullRequest
1 голос
/ 10 января 2020

Я не могу понять работу подзапроса. Когда я использую запрос 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 Я не могу понять это поведение. Может кто-нибудь объяснить, почему запрос работает, даже если подзапрос не удается?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...