Объединение 1 или 2 таблиц с помощью команды Max

#sql #inner-join #max

#sql #внутреннее объединение #макс

Вопрос:

Может кто-нибудь помочь мне соединить их с таблицами и извлечь PRODUCT_ID, PRODUCT_CODE, PRODUCT_NAME и LAST_ORDER_DATE, поскольку у меня не было большого опыта работы только с SQL MYSQL.

Я не уверен, нужна ли мне вообще вторая таблица или можно использовать MAX in только в ODBC_ORDER_LINE_ALL.

Таблица 1

 Name: ODBC_ORDER_LINE_ALL

ORDER_LINE_ID

ORDER_LINE_DATE

ORDER_LINE_PRODUCT_ID

ORDER_LINE_PRODUCT_CODE

ORDER_LINE_PRODUCT_NAME
  

Таблица 2

 Name: ODBC_PRODUCT_ALL

PRODUCT_ID

PRODUCT_CODE

PRODUCT_NAME
  

Заранее спасибо.

Рой

Комментарии:

1. Что вы имеете в виду, говоря «не имел большого опыта работы с SQL только MYSQL’ ? MySQL — это название продукта, SQL — это название языка, который также используется в MySQL (ну, специфический вкус SQL, но обычно его все еще называют «SQL»). Вы на самом деле хотели случайно сказать «SQL Server» (что не то же самое, что сказать «SQL», хотя люди путают эти два)?

Ответ №1:

Вы пробовали простую группировку, например :

 SELECT ORDER_LINE_PRODUCT_ID,ORDER_LINE_PRODUCT_CODE,ORDER_LINE_PRODUCT_NAME, MAX(ORDER_LINE_DATE)
FROM ODBC_ORDER_LINE_ALL
GROUP BY ORDER_LINE_PRODUCT_ID,ORDER_LINE_PRODUCT_CODE,ORDER_LINE_PRODUCT_NAME
  

Ответ №2:

Вам не требуется вторая таблица.

В вашей текущей реализации запрос будет

 SELECT ORDER_LINE_PRODUCT_ID, 
       ORDER_LINE_PRODUCT_CODE, 
       ORDER_LINE_PRODUCT_NAME, 
       MAX(ORDER_LINE_DATE)
FROM ODBC_ORDER_LINE_ALL
GROUP BY ORDER_LINE_PRODUCT_ID
  

Однако вам необходимо нормализовать вашу первую таблицу.
Предполагая, что ваш идентификатор продукта, код продукта и название продукта в таблице строк заказа ссылаются на те же значения в таблице продуктов,
(И что один идентификатор продукта соответствует только одному коду и имени продукта),
Ваша структура таблицы для Table 1: ODBC_ORDER_LINE_ALL должна быть

 ORDER_LINE_ID
ORDER_LINE_DATE
Foreign key (ORDER_LINE_PRODUCT_ID) references ODBC_PRODUCT_ALL(PRODUCT_ID)
  

В этом случае запрос будет

 SELECT ORDER_LINE_PRODUCT_ID, PRODUCT_CODE, PRODUCT_NAME,  MAX(ORDER_LINE_DATE), 
FROM ODBC_ORDER_LINE_ALL 
     JOIN ODBC_PRODUCT_ALL
     ON  ORDER_LINE_PRODUCT_ID = PRODUCT_ID
GROUP BY ORDER_LINE_PRODUCT_ID