我有两个表,看起来像:
离线对话
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条消息(由messages
表中的sentBy
确定。
我想做的是删除offlineconversations
中的所有行,其中消息是由id为200的用户发送的,因此消息中的sentBy
为200。offlineconversations
表中的消息ID与messages
中的消息标识相关联。然后脱机对话将只剩下:
userID | messageID
100 17
因此,基本上,从offlineconversations
中删除userID为100并且sentBy
(200)与其相关联的行。
CCD_ 9用于历史方面。如果有人取消激活他的帐户,则不应删除messages
中的行。如果用户完全删除了他的帐户,那么这些行也应该从offlineconversations和消息中删除。正如有人在评论中指出的那样,我知道我可以通过级联来做到这一点。
感谢
此查询应该有效:
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
关于:
delete from offlineconversations where messageID in (select messageId from
messages where sentBy = 200)