1

我有两张桌子:

groupMessage用于记录组用户消息

groupMessageNum用于消息数超过 300 的记录。

 -------------------
 | groupMessage    |
 |-----------------|
 |     id          |
 |    hostId       |
 |    roomId       |
 ===================


 ---------------------
 | groupMessageNum   |
 |-------------------|
 |     id            |
 |    hostId         |
 |    roomId         |
 =====================

我正在尝试删除其中的记录groupMessagegroupMessageNum删除groupMessageNum.

如果groupMessage要删除的记录超过300条,我会删除第300条之后的记录。

我的 sql 是:

delete group, groupNum from groupMessage group, groupMessageNum
groupNum where group.hostId = groupNum.hostId and group.roomId =
groupNum.roomId;

这将删除 groupMessage 中的所有记录。

那么,我怎样才能只删除第 300 条之后的记录呢?

例子:

有 100 个用户,60 个用户有 300 多条消息。所有用户消息都在 groupMessage 表中。groupMessageNum 中有 60 个用户的 id,因为他们的消息超过 300 条。

现在我正在尝试删除第 300 条消息之后的用户消息。所以我首先在 groupMessageNum 表中找到用户 ID,然后在 groupMessage 表中删除这些消息。

4

2 回答 2

2

你可以尝试这样的事情:

DELETE group, groupNum
FROM groupMessage group
     INNER JOIN (SELECT hostId 
                 FROM group 
                 ORDER BY msgTime ASC 
                 LIMIT 300, 9999999999
                ) group2
         ON group.hostId = group2.hostId
     INNER JOIN groupMessageNum groupNum
         ON group.hostId = groupNum.hostId AND
            group.roomId = groupNum.roomId;

或者您可以尝试其他方式:

DELETE group, groupNum
FROM groupMessage group
     INNER JOIN (SELECT hostId, (@rank := @rank + 1) AS rank
                 FROM group, (SELECT @rank:= 0) a
                 ORDER BY msgTime ASC 
                ) group2
         ON group.hostId = group2.hostId AND
            rank > 300
     INNER JOIN groupMessageNum groupNum
         ON group.hostId = groupNum.hostId AND
            group.roomId = groupNum.roomId;
于 2012-08-17T04:52:28.377 回答
0
DELETE A, B
FROM groupMessage A
INNER JOIN groupMessageNum B on A.hostId = B.hostId and A.roomId=B.roomId
INNER JOIN (SELECT id FROM groupMessage LIMIT 300,999999) C
ON A.id = B.id  
于 2012-08-17T04:43:08.197 回答