2012-05-23 38 views
3

我有一个选择查询,它返回所有会议的时间少于8天的会话ID。它很棒!MySQL更新相同的表作为选择具有和组

SELECT sessionID FROM session WHERE sessionStatus = 'open' GROUP BY sessionID HAVING MAX(refTime) <= 8; 

但是,我想更新表,以便与会话ID的所有记录小于8天大有sessionStatus变更为“关闭”。从stackoverflow我知道我不能更新表,我也选择,并有分组是比较年龄功能,使这更复杂。

我试过了,但没有骰子!

UPDATE session 
SET sessionStatus='closed' 
WHERE sessionID = (select * from (SELECT MAX(sessionID) FROM session where sessionStatus = 'open') as t); 

我真的很感谢任何帮助!

+0

你得到任何错误? –

+0

请尝试此解决方案: [http://stackoverflow.com/questions/8127257/mysql-update-subset-having/22638878#22638878][1] 问候 彼得 [1 ]:http://stackoverflow.com/questions/8127257/mysql-update-subset-having/22638878#22638878 –

回答

2

这里是我的情况下使用这样的解决方法:

CREATE TEMPORARY TABLE tempsessions AS SELECT MAX(sessionID) AS sessionID FROM session where sessionStatus = 'open'; 
UPDATE session SET sessionStatus = 'closed' WHERE sessionID IN (SELECT sessionID FROM tempsessions); 
DROP TEMPORARY TABLE tempsessions; 
+0

它的工作原理!非常感谢! – user1412860

2

尝试这一个也 -

UPDATE 
    session s1 
JOIN 
    (SELECT MAX(sessionID) sessionID FROM session WHERE sessionStatus = 'open') s2 
    ON s1.sessionID = s2.sessionID 
SET 
    s1.sessionStatus = 'closed';