我有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消息中删除这些行。我知道我可以通过评论中指出的级联来做到这一点。
由于
答案 0 :(得分:4)
此查询应该有效:
DELETE t.*
FROM offlineconversations t
JOIN messages m
ON m.messageID = t.messageID
WHERE m.sentBy = 200 AND t.userID = 100;
如果您还需要删除邮件:
DELETE t.*,m.*
FROM offlineconversations t
JOIN messages m
ON m.messageID = t.messageID
WHERE m.sentBy = 200 AND t.userID=100;
答案 1 :(得分:3)
怎么样:
delete from offlineconversations where messageID in (select messageId from
messages where sentBy = 200)