@alpa_kz

Запрос delete не выполняется, хотя тот же запрос select-а выполняется можете помочь почему?

5ba225305ed67177614183.png
есть таблица mdate, где есть 3 столбца user_id, message_id, message_date, и мне надо удалить все сообщения, кроме самих последних от каждого юзера.
select * from mdate m1 
LEFT JOIN (
SELECT _user_id, max(message_date) as 'max_message_date'
 FROM mdate GROUP BY _user_id ) m2 
ON m1.message_date = m2.max_message_date AND 
m1._user_id = m2._user_id
WHERE m2._user_id is null;

5ba227ea80bfc595014069.png
этот запрос выводить все записи которые не последние, т.е. старые , если сделаю с inner join и без where ,
тогда выводить все последнее сообщения, а при delete говорить что синтаксическая ошибка? и понят не могу где ошибка?
delete from mdate m1 
LEFT JOIN (SELECT _user_id, max(message_date) as 'max_message_date' 
FROM mdate GROUP BY _user_id ) m2 ON m1.message_date = m2.max_message_date 
AND m1._user_id=m2._user_id
 WHERE m2._user_id is null;

5ba2288736d6f622258214.png
пробовал и другой вариант
вот запрос
delete from mdate m0 where m0.message_id not in 
(select m1.message_id from mdate m1  
JOIN ( SELECT mg._user_id, max(mg.message_date) as 'max_message_date'  
FROM mdate as mg GROUP BY mg._user_id ) m2 
ON m1.message_date = m2.max_message_date 
AND m1._user_id = m2._user_id);

5ba229d261f2a043972529.png
тоже не работает?!
система Debian, версия mysql или mariadb как вам убодно: 10.1.26-MariaDB-0+deb9u1
  • Вопрос задан
  • 240 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так в последнем запросе уберите псевдоним m0, он там совсем ни к чему.
Ответ написан
LaRN
@LaRN
Senior Developer
Можно вот так попробовать:
DELETE mdate
   FROM mdate aft
  WHERE EXISTS(SELECT 1
                 FROM mdate bfr
                WHERE bfr._user_id     = aft._user_id
                  AND bfr.message_date > aft.message_date)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы