Правила единственного значения очень важны. Не каждый запрос, вынуждающий следовать этому правилу, привел бы к неоднозначному результату, но большинство все же приводит. Было бы разумно, если бы СУБД могла отличить неоднозначный запрос от однозначного и оповещать об ошибке только когда данные содержат неоднозначность. Но это отрицательно сказалось бы на надежности приложения, поскольку один и тот же запрос мог бы быть правильным или недопустимым, в зависимости от состояния данных.
СПОСОБЫ РАСПОЗНАВАНИЯ АНТИПАТТЕРНА
В базах данных большинства производителей в то время, как вы пишете запрос, нарушающий Правило единственного значения, СУБД сообщает об ошибке немедленно. Ниже приведены примеры сообщений об ошибках в некоторых базах данных:
• Firebird 2.1:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)1
• IBM DB2 9.5:
1 Недопустимое выражение в списке выборки (не содержит агрегатную функцию либо оператор GROUP BY)
2 Выражение, начинающееся с "BUG_ID", указанное в выражении SELECT, выражении HAVING или выражении ORDER BY, не указано в выражении GROUP BY, ИЛИ выражение указано в выражении SELECT, выражении HAVING или выражении ORDER BY с функцией столбца и при этом не указано в выражении GROUP BY.
An expression starting with «BUG_ID" specified in a SELECT clause, HAVING clause, or ORDER BY clause is not specified in the GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER BY clause with a column function and no GROUP BY clause is specified.2 MI GROUP BY И DISTINCT».
Опубликовал vovan666
August 16 2013 07:40:30 ·
0 Комментариев ·
3822 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.