У меня есть таблица (table1
), содержащая идентификатор пользователя и даты транзакций (stt_stid
, stt_date
), а также некоторые другие нереляционные данные.MySQL - таблица обновления с указанием даты из другой таблицы
У меня есть другой стол (table2
) с парой сто записей, которые мне нужны для получения min(stt_date)
на основе table1.stt_stid = table2.stid
.
table1
5M + rows, и у меня возникли проблемы с написанием эффективного соединения без получения ошибки.
Я пытался что-то вдоль линий:
UPDATE table2 JOIN (
SELECT stt_stid,
MIN(stt_date) AS mindate
FROM table1
WHERE stt_amt > 0
AND stt_prid = 1
GROUP BY stt_stid) temp
ON table2.stid = table1.stt_stid
SET table2.firstdate = temp.mindate
Пример запроса не имеет источника строк с именем 'table1', а между' temp' и 'table2' есть и (неявный)' CROSS JOIN' ... как показано, мы ожидаем, что запрос вызовет ошибку. (Предполагая, что встроенное представление должно ссылаться на 'table1', убедитесь, что у вас есть индекс' ON table1 (stt_stid, stt_date) '. – spencer7593
Я обновил запрос - таблица1 находится в таблице SELECT. stt_stid, но не дата. – Steve
Добавьте индекс, содержащий BOTH столбцы, 'stt_stid' в качестве ведущего столбца (из-за GROUP BY), за которым следует' stt_date' (из-за агрегата MIN). – spencer7593