У меня следующий вопрос:
Перечислите всю информацию о клиентах и продуктах для всех продуктов, проданных в январе 2016 года клиентам, чья фамилия начинается с буквы «O».
Из которого я написал следующее:
SELECT CUS_LNAME,
customer.CUS_CODE,
CUS_FNAME,
CUS_INITIAL,
CUS_AREACODE,
CUS_PHONE,
CUS_BALANCE,
CUS_PPBAL,
P_DESCRIPT, P_CODE, vendor.V_CODE, P_QOH, P_REORDER,
P_INDATE, P_DISCOUNT, P_PRICE, P_MIN
FROM customer
JOIN product
JOIN vendor
JOIN invoice ON invoice.CUS_CODE=customer.CUS_CODE
WHERE EXTRACT(YEAR_MONTH FROM '2016-01-01')
GROUP BY product.P_CODE
HAVING CUS_LNAME LIKE 'O%';
Получает следующую ошибку:
ERROR 1055 (42000) at line 1: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mimir.customer.CUS_LNAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
query returned no results!
Прочитав вопрос несколько раз, я пришел с идеей просто напечатать имя каждого клиента, который купил что-то в эту дату с фамилией, начинающейся с O:
SELECT CUS_LNAME,
customer.CUS_CODE,
CUS_FNAME,
CUS_INITIAL,
CUS_AREACODE,
CUS_PHONE,
CUS_BALANCE,
CUS_PPBAL,
P_DESCRIPT, P_CODE, vendor.V_CODE, P_QOH, P_REORDER,
P_INDATE, P_DISCOUNT, P_PRICE, P_MIN
FROM customer
JOIN product
JOIN vendor
JOIN invoice ON invoice.CUS_CODE=customer.CUS_CODE
WHERE EXTRACT(YEAR_MONTH FROM '2016-01-01') AND CUS_LNAME LIKE 'O%';
Запрос работает на MySQL Workbench, но, что любопытно, не работает на онлайн-инструменте (Мимир) Я использую, чтобы представить свой ответ. Кроме того, без каких-либо отзывов я оставил размышления над сущностью вопроса. Он не дает никакой обратной связи, а просто: rows incorrect!
Я не верю, что изменение порядка моего JOIN
или таблицы, на которой я использую FROM
, изменит что-либо.
Любые отзывы или советы будут более чем оценены. Вот ERD для вышеупомянутого вопроса.