我一直在试图实施解决方案,我发现我认为这是一个简单的查询。
SETUP:
表1:UID,Field1,TimeStamp
表2:UID,fk_table1UID,Field1,TimeStamp
表1有一个on before update触发器,它将整个OLD行插入表2中。(有效保留表1的更改日志)
表2还有fk_table1UID到table1.UID的Foriegn键约束
问题:
我想要做的就是构建一个
的查询(伪代码) update table1.Field1 WHERE UID = X(用户输入) 同 table2.Field1 WHERE table2.TimeStamp = max(table2.TimeStamp)AND table2.fk_table2UID = table1.UID
我尝试过使用内部联接进行更新的不同尝试,但我遇到了一个问题,即我无法引用已调用的表或其他内容。 (我相信与我的触发器有关。)
问题:
如何在一次通话查询中解决此问题?
答案 0 :(得分:0)
试试这个:
UPDATE table1
SET table1.Field1 = (SELECT table2.Field1 FROM table2 WHERE table2.UIDfk = X ORDER BY table2.TimeStamp DESC LIMIT 1)
WHERE table1.UID = X
答案 1 :(得分:0)
加入一个返回所需值的子查询。
UPDATE table1 AS t1
JOIN (SELECT Field1 FROM table2
WHERE fk_table1UID = @X
ORDER BY TimeStamp DESC
LIMIT 1) AS t2
SET t1.Field1 = t2.Field1
WHERE UID = @X