使用JOIN删除行

时间:2014-04-10 21:14:23

标签: mysql sql

我有2张表格如下:

offlineconversations

userID | messageID

100      15
100      16
100      17

讯息

messageID | sentBy | message               | ConvID
15          200      "Hi userID 100!"       hash
16          200      "Hi again 100!"        hash
17          300      "Hi I am user 300 :)"  hash

所以在这里,UserID 100收到来自用户200和300的3条消息(由sentBy表中的messages确定。

我想要做的是删除offlineconversations中的所有行,其中消息是由ID为200的用户发送的,因此消息中为sentBy 200。 offlineconversations表中的messageID与messages中的messageID相关联。然后,离线对话只会保留:

userID | messageID
100      17

基本上,从offlineconversations删除userID为100且与sentBy(200)相关联的行。

convID用于历史方面。如果有人取消激活其帐户,则不应删除messages中的行。如果用户完全删除了他的帐户,那么也应该从offlineconversations AND消息中删除这些行。我知道我可以通过评论中指出的级联来做到这一点。

由于

2 个答案:

答案 0 :(得分:4)

此查询应该有效:

 DELETE t.* 
 FROM offlineconversations t 
 JOIN messages m 
 ON m.messageID = t.messageID 
 WHERE m.sentBy = 200 AND t.userID = 100;

Fiddle

如果您还需要删除邮件:

 DELETE t.*,m.* 
 FROM offlineconversations t 
 JOIN messages m 
 ON m.messageID = t.messageID 
 WHERE m.sentBy = 200 AND t.userID=100;

Fiidle

答案 1 :(得分:3)

怎么样:

    delete from offlineconversations where messageID in (select messageId from 
messages where sentBy = 200)