Есть ли другой способ посмотреть на вопросы типа «И», как этот? - PullRequest
0 голосов
/ 13 февраля 2020

У меня следующий вопрос:

Перечислите всю информацию о клиентах и ​​продуктах для всех продуктов, проданных в январе 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 для вышеупомянутого вопроса.

enter image description here

...