2012-11-18 62 views
2

我想知道,如果有人可以帮助我 我有两个表1)简介2)mailbox_conversation 每个表都有一个称为公共列PROFILE_ID在第二个表删除行

我想找到的所有成员具有membership_id = 107的配置文件表(即,获取具有成员资格类型107的成员子集,并且它们将按profile_id在数组中列出) 然后使用该成员子集,查找表mailbox_conversation中具有的所有对话子集中的profile_id - 因此许多电子邮件可能具有相同的profile_id,我希望它们全部删除

回答

2

查找对应于型材membership_id电子邮件= 107

select m.id 
from mailbox_conversation m 
join profile p on p.profile_id = m.profile_id 
        and p.membership_id = 107 

删除这些记录

delete from mailbox_conversation 
using mailbox_conversation, profile 
where profile.profile_id = mailbox_conversation.profile_id 
     and profile.membership_id = 107; 

SQL Fiddle为了娱乐。

+0

+1;不错。在第一行选择'm.profile_id first'。 – vels4j

+1

@ vels4j谢谢。结果是一样的。请参见[SQL小提琴](http://www.sqlfiddle.com/#!2/9be16/3/0)。 –

+0

对于那些从搜索到达的人来说,并不是所有其他的RDBMS都允许“删除...使用”(可惜,那)。您可以使用完整的'SELECT'查询重写查询作为'WHERE'子句。 –

0

试试这个

select t1.profile_id from mailbox_conversation t1 where t1.profile_id in 
(select t2.profile_id from profile t2 where t2.membership_id = 107)