Mysql 使用JOIN删除行
我有两张桌子,看起来像: 离线对话 信息 在这里,UserID 100从messages表中sentBy确定的用户200和300接收到3条消息 我想做的是删除offlineconversations中的所有行,其中消息由id为200的用户发送,因此sentBy 200在消息中。offlineconversations表中的messageID与messages中的messageID相关联,那么offlineconversations将只剩下:Mysql 使用JOIN删除行,mysql,sql,Mysql,Sql,我有两张桌子,看起来像: 离线对话 信息 在这里,UserID 100从messages表中sentBy确定的用户200和300接收到3条消息 我想做的是删除offlineconversations中的所有行,其中消息由id为200的用户发送,因此sentBy 200在消息中。offlineconversations表中的messageID与messages中的messageID相关联,那么offlineconversations将只剩下: userID | messageID 100
userID | messageID
100 17
因此,基本上,从离线对话中删除userID为100且sentBy 200与之关联的行
convID用于历史记录方面。如果有人停用了他的帐户,则不应删除邮件中的行。如果用户完全删除了他的帐户,那么这些行也应该从脱机对话和消息中删除。正如有人在评论中指出的那样,我知道我可以通过级联来实现这一点
谢谢那么:
delete from offlineconversations where messageID in (select messageId from
messages where sentBy = 200)
那么:
delete from offlineconversations where messageID in (select messageId from
messages where sentBy = 200)
此查询应适用于以下情况:
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;
此查询应适用于以下情况:
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;
假设这两个表之间存在外键关系?级联删除可以解决这个问题,例如,在邮件中删除15/200也会在脱机对话中删除100/15。问题是我不想从邮件中删除实际的邮件,因为如果联系人决定再次成为朋友,我会将其用于历史记录。但是如果从脱机对话中删除100/15,您如何将该消息与用户100重新关联?一旦100/15消失,将不再有收件人连接到Message 15,也无法知道它最初发送给谁。这意味着你正在使用ID。这是重复使用IDs是个坏主意的原因之一。一个新帐户应该获得一个新的ID,那么这个问题就没有意义了。但是为什么你需要在停用时更改/删除消息中的任何内容呢?假设用户表中只有一个标志字段,例如deactivated=1。没有删除或任何事情,只是一个简单的更新0=>1。假设这两个表之间有外键关系?级联删除可以解决这个问题,例如,在邮件中删除15/200也会在脱机对话中删除100/15。问题是我不想从邮件中删除实际的邮件,因为如果联系人决定再次成为朋友,我会将其用于历史记录。但是如果从脱机对话中删除100/15,您如何将该消息与用户100重新关联?一旦100/15消失,将不再有收件人连接到Message 15,也无法知道它最初发送给谁。这意味着你正在使用ID。这是重复使用IDs是个坏主意的原因之一。一个新帐户应该获得一个新的ID,那么这个问题就没有意义了。但是为什么你需要在停用时更改/删除消息中的任何内容呢?假设用户表中只有一个标志字段,例如deactivated=1。没有删除或任何事情,只是一个简单的更新0=>1。假设用户200也发送给用户101、102、103等。它不会也删除与这些其他联系人相关联的行吗?您需要外键来执行此操作,或者删除t.*,m.*。。。或者甚至DELETE*您的查询是否删除了发送给任何人的所有行,而不仅仅是两个表中的用户100和用户200?不仅在脱机对话中,如果您都想要,请写DELETE*呃,当我写“基本”语句时,我犯了一个错误,我应该说:所以基本上,从脱机对话中删除用户ID为100且sentBy 200与之关联的行。假设用户200也发送给用户101、102、103等。它不会同时删除与这些其他联系人关联的行吗?您需要外键,或者删除t.*,m.*。。。或者甚至DELETE*您的查询是否删除了发送给任何人的所有行,而不仅仅是两个表中的用户100和用户200?不仅在脱机对话中,如果您都想要,请写DELETE*呃,当我写“基本”语句时,我犯了一个错误,我应该说:所以基本上,从离线对话中删除userID为100且sentBy 200与之关联的行。