Характерные ошибки при решении задач на написание запросов на выборку (SELECT)База данных «Корабли»Упражнение 39 стр. 4 |
||
В связи с последним предикатом хочется напомнить читателям, что запросы, которые мы анализируем, были написаны посетителями сайта. Допускаемые ошибки не надуманы, а являются естественным следствием процесса обучения, когда формальное знание языка программирования применяется к решению конкретных задач. Собственно, эта книга и написана для того, чтобы облегчить переход от формального знания к практическому умению. Однако вернемся к условию. В соответствии с описанием предметной области корабль может быть:
Поэтому условие MIN(result) = 'damaged' будет выполнено, если в одной из битв корабль был поврежден (при естественной сортировке текстовых строк буква «d» идет раньше, чем буквы «o» и «s»). Однако это совсем не означает, что поврежден он был прежде, чем принял участие в следующем сражении, что требуется по условиям задачи. Здесь нужно оценивать даты сражений. Что же касается MAX(result) = 'damaged', то это условие не будет выполняться, если результаты сражений были разные; если же они были одинаковые, то это не даст ничего нового по сравнению с первым условием на минимум. Вот такое наложение ошибок давало правильный результат на обеих проверочных базах. Меры уже приняты: добавлены проверочные данные, на которых данное решение дает неверный результат. Как это и должно быть по логике этого запроса. |