Строгий режим MYSQL, как его использовать? - PullRequest
0 голосов
/ 28 августа 2018

Я узнал об этом строгом режиме во время моего курса, мне посоветовали отключить его, и на данный момент я это сделал. Но если существует строгий режим, у него, безусловно, есть причина. Сначала позвольте мне показать код, который получил ошибку

SELECT `first_name`,
       `last_name`, 
       `order_date`, 
       `amount` 
 FROM `customers`
    JOIN `orders`
        ON `customers`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id`;

и я получил КОД ОШИБКИ 1055 ошибка изображения

для того, что мне сказали, я должен был использовать все мои поля в GROUP BY, кроме случаев агрегирования.

Так и должно быть.

SELECT `first_name`,
       `last_name`, 
       `order_date`, 
       `amount` 
 FROM `customers`
    JOIN `orders`
        ON `customers`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id`,`order_date`, 'amount';

Код будет «работать», но он будет группироваться по order_date и «количеству», а я не хочу, чтобы это происходило.

для amount мне пришлось использовать SUM (), поэтому мне больше не приходилось его использовать в GROUP BY, но order_date все еще там.

Поскольку amount is still here будет отображать все параметры даты, я знаю, что возможно иметь только одну дату для идентификатора = id

для дальнейшего использования, как мне следует использовать STRICT MODE или отключить его?

1 Ответ

0 голосов
/ 28 августа 2018
  1. Обычно в MySQL предпочтителен строгий режим, поскольку он помогает избежать некоторых распространенных ошибок, таких как эта.

  2. Когда вы выбираете столбцы, которые не включены в ваше предложение GROUP BY без каких-либо агрегаций, MySQL без строгого режима может возвращать любую случайную строку, и вы не можете делать какие-либо предположения о том, какая строка будет быть возвращенным. MySQL в строгом режиме , как и многие другие СУБД, выдает ошибку, так что вы вынуждены исправить свой запрос.

  3. Чтобы правильно написать запрос, сначала нужно выяснить, какие данные вы хотите получить для order_date и amount - например, должен ли это быть последний заказ, сделанный клиентом или что-то еще.

...