Solusinya adalah menyusun ORDER BY dan LIMIT dalam klausa FROM sebagai bagian dari gabungan. Ini memungkinkan Anda menemukan baris yang tepat untuk diperbarui (ta.id) terlebih dahulu, lalu komit pembaruan.
UPDATE tableA AS target
INNER JOIN (
SELECT ta.id
FROM tableA AS ta
INNER JOIN tableB AS tb ON tb.id = ta.user_id
WHERE tb.username = '$varName'
ORDER BY ta.datetime DESC
LIMIT 1) AS source ON source.id = target.id
SET col1 = '$var';
Kiat topi untuk Baron Schwartz, a.k.a. Xaprb, untuk posting luar biasa tentang topik yang tepat ini:http://www.xaprb.com/blog/2006/08/10/how-to-use- order-by-and-limit-on-multi-table-updates-in-mysql/