5

経過時間が 8 日未満のすべてのセッションのセッション ID を返す Select クエリがあります。それはうまくいきます!

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

しかし、8 日未満のセッション ID を持つすべてのレコードの sessionStatus が「closed」に変更されるように、テーブルを更新しようとしています。stackoverflow から、私も選択しているテーブルを更新できないこと、および Have と Group By がこれをより複雑にする agerate 関数であることを知っています。

私はこれを試しましたが、サイコロはありません!

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

私は本当に助けていただければ幸いです!

4

2 に答える 2

4

このような場合に使用する回避策は次のとおりです。

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;
于 2012-05-23T14:32:02.003 に答える
2

これも試してみてください-

UPDATE
  session s1
JOIN
  (SELECT MAX(sessionID) sessionID FROM session WHERE sessionStatus = 'open') s2
    ON s1.sessionID = s2.sessionID
SET
  s1.sessionStatus = 'closed';
于 2012-05-23T14:56:36.723 に答える