#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