Đây là truy vấn ban đầu của bạn đã được sửa đổi cho phù hợp:
select
tt1.id,
tt1.amount,
tt1.AccountId,
(tt1.amount-ifnull(tt2.amount, 0)) as delta
from trans tt1
left outer JOIN trans tt2 on tt1.accountid = tt2.accountid
and month(tt1.date1)-month(tt2.date1)=1;
So sánh tháng được chuyển từ where
thành on
, điều này tạo nên sự khác biệt cho left join
và tt2.amount
được thay thế bằng ifnull(tt2.amount, 0)
.
UPDATE
phiên bản của tập lệnh:
update tt1
set delta = (tt1.amount-ifnull(tt2.amount, 0))
from trans tt1
left outer JOIN trans tt2 on tt1.accountid = tt2.accountid
and month(tt1.date1)-month(tt2.date1)=1;
Cú pháp MySQL chính xác cho bản cập nhật ở trên thực sự phải là:
update trans tt1
left outer JOIN trans tt2
on tt1.accountid = tt2.accountid
and month(tt1.date1)-month(tt2.date1)=1
set tt1.delta = (tt1.amount-ifnull(tt2.amount, 0));
(Cảm ơn @pinkb .)