[英]How do I update a column with a value based on the latest row of a child table in mySQL?
我有兩個表:具有一對多關系的Item和ItemHistory。
我想稍微展平'item'表並添加:dtLastUpdated和nLastUpdatedByUserID列,但是我需要升級表數據。
項目
的NID
dtCreated
dtLastUpdated(新列)
nLastUpdatedByUserID(新列)
ItemHistory
的NID
nItemID
dtUpdated
nUpdatedByUserID
有人可以幫我創建一個更新語句來做到這一點。 我已經嘗試過各種在mySQL中不合法的事情,所以有點卡住了。 例如...
UPDATE Item
INNER JOIN ItemHistory ON ItemHistory.nItemID=Item.nID
SET Item.dtLastUpdated = ItemHistory.dtUpdated,
Item.nLastUpdatedByUserID = ItemHistory.nUpdatedByUserID
ORDER BY ItemHistory.dtUpdated DESC
這對於mySQL 5.5安裝是必需的。
謝謝
update Item as I
inner join (select IH.nItemID,
IH.dtUpdated,
IH.nUpdatedByUserID
from ItemHistory as IH
inner join (select nItemID,
max(dtUpdated) as dtUpdated
from ItemHistory
group by nItemID) as IHLast
on IH.nItemID = IHLast.nItemID and
IH.dtUpdated = IHLast.dtUpdated) as IH
on IH.nItemID = I.nID
set
I.dtLastUpdated = IH.dtUpdated,
I.nLastUpdatedByUserID = IH.nUpdatedByUserID;
最里面的查詢獲取nItemID
和max(dtUpdated)
並重新連接到ItemHistory
以獲得nUpdatedByUserID,其中max(dtUpdated) = dtUpdated
。 在MySQL中可能有其他/更好的方法來完成此操作,但此方法可以按預期工作。
丹,您的聲明永遠不會起作用,因為您正在更新甚至不存在的項目表中的列。
根據您的說法,Item表僅具有nID,dtCreated,但您正在對Item表中的“ dtLastUpdated”列進行更新,而該更新不存在。 與nLastUpdatedByUserID類似。
在這里查看您的聲明:
UPDATE Item INNER JOIN ItemHistory ON ItemHistory.nItemID=Item.nID
SET Item.dtLastUpdated=ItemHistory.dtUpdated,
Item.nLastUpdatedByUserID=ItemHistory.nUpdatedByUserID
ORDER BY ItemHistory.dtUpdated DESC
您需要首先在Item表中創建這些列: 這是在MySQL中進行操作的參考手冊 。 問候。
編輯 :閱讀您的評論后,我正在更正您的sql語句(這似乎是MySQL上使用內部聯接進行更新的語法):
UPDATE from Item as I inner join ItemHistory as IH ON IH.nItemID=I.nID
SET I.dtLastUpdated=IH.dtUpdated,
I.nLastUpdatedByUserID=IH.nUpdatedByUserID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.