MySQL Table Update - Как избежать, чтобы last_activity_date не был нулевым? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть таблица Счет a со столбцами Customers_id , account_id и last_activity_date и другой таблицей Транзакция t с датой транзакции txn_date столбец в моей базе данных.Я хочу обновить a.last_activity_date , чтобы оно было max (t.txn_date) .Некоторые учетные записи клиентов могут не иметь txn_date от t.Чтобы избежать нулевого значения в обновленной a.last_activity_date , я добавил подзапрос, используя WHERE EXISTS.Вот код:

UPDATE account a                                                           
SET a.last_activity_date =                                            
(SELECT MAX(t.txn_date)                                                  
 FROM transaction t                                                      
 WHERE t.account_id = a.account_id)                                      
 WHERE EXISTS (SELECT 1                                                   
 FROM transaction t                                                      
 WHERE t.account_id = a.account_id);  

Но этот подзапрос не работает:

Сообщение об ошибке: в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с 'ОТ транзакции t ГДЕ t.account_id = a.account_id) ГДЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 FRO' в строке 4.

Может ли кто-нибудь помочь мне с этим, пожалуйста? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Ваш запрос выглядит хорошо.Но лучший способ выразить это в MySQL - это использовать JOIN:

UPDATE account a JOIN
       (SELECT t.account_id, MAX(t.txn_date)as max_txn_date                                                  
        FROM transaction t  
        GROUP BY t.account_id
       ) t                                                    
       ON t.account_id = a.account_id)                                                        
    SET a.last_activity_date = t.max_txn_date; 
0 голосов
/ 25 сентября 2018

У вас неправильный псевдоним.Вам необходимо добавить предложение from с псевдонимом, например thi:

UPDATE a                                                           
SET last_activity_date =                                            
    (SELECT MAX(t.txn_date)                                                  
    FROM transaction t                                                      
    WHERE t.account_id = a.account_id
    )   
from account a                                   
WHERE EXISTS (
    SELECT 1                                                   
    FROM transaction t                                                      
    WHERE t.account_id = a.account_id
); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...