我有兩張桌子
資訊
id ,thread_id ,sender_id ,message_content
1. 10. 2. message_content_1
2. 5. 1 message_content_2
線
id status
5. close
10. Open
我想要實作的是如果最新的 send_id!=1(aka not admin) > 我想將執行緒狀態更新為 open 。
到目前為止我做了什么
UPDATE thread
SET thread.status=open
RIGHT JOIN message
ON thread.id=message.thread_id
WHERE message.senderId!=1 AND (SELECT max(message.id) FROM message WHERE message.thread_id=thread.id)
我做錯了什么?
uj5u.com熱心網友回復:
使用FIRST_VALUE()視窗函式獲取每個thread_id最后一個sender_id:
UPDATE thread t
INNER JOIN (
SELECT DISTINCT thread_id,
FIRST_VALUE(sender_id) OVER (PARTITION BY thread_id ORDER BY id DESC) sender_id
FROM message
) m ON m.thread_id = t.id
SET t.status = 'open'
WHERE m.sender_id <> 1;
請參閱演示。
uj5u.com熱心網友回復:
我希望這會奏效。
update thread join message on thread.id=message.thread_id set thread.status='open' where message.sender_id!=1 and (SELECT max(message.id) FROM message);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/482544.html
