2015-02-06 66 views
1

所有行我有2个表:MySQL的删除与加入

表1对每个用户1行:

ID startDate EndDate 
1 09-08-2015 09-08-2015 
2 09-08-2015 09-08-2015 

第二个表包含每个用户的多个记录:

ID UserID data_key data_val 
1 1  "email" "[email protected]" 
2 1  "name"  "John Brown" 
3 2  "email" "[email protected]" 
4 2  "name"  "Tom Brady" 

我没有使用innodb,因此我无法在删除时使用级联。我需要做的是从两个表中删除具有匹配ID的所有记录,其中table2.data_key = "email"和该记录的数据_value LIKE "%@test.com%"。因此,在这种情况下,table1 row1将与表2中用户ID为1的所有行一起被删除。到目前为止,我所有的尝试都失败了。我该如何做到这一点,谢谢!

我的最新尝试(我理解为什么它不工作,而是如何解决我丢失):

delete 
    table1, table2.* 
from table1 
    INNER JOIN table2 
    ON table1.ID = table2.User_ID 
WHERE table2.data_key = 'email' 
AND table2.data_val LIKE '%stringofinterest%' 
AND table1.ID = table2.User_ID 
+0

那么,布伦丹,你是否得到它的工作? – 2015-02-09 10:52:37

回答

1

不能同时从两个表中删除行。您必须首先从一个表中删除行,然后再从另一个表中删除行。

但是,我不确定当你说“我没有使用innodb,所以我不能在级联上使用删除”时你的意思。 ON DELETE CASCADE是标准SQL的一个特性,不是innodb的一个特殊功能,所以除非你对RDBMS使用了一些完全蹩脚的借口,否则你应该可以做到ON DELETE CASCADE

+0

我相信mysql innodb增加了外键支持。没有外键支持,我认为如果没有适当的关系,DELETE CASCADE是不可能的。如果我在这里错了,请纠正我。 – 2015-02-06 16:59:40

+0

让我们停止谈论innodb做了什么,因为你说你不使用innodb,而是让我们谈谈你正在使用的是什么。 – 2015-02-06 17:02:52

+0

MySQL使用MyISAM存储引擎。 – 2015-02-06 19:03:46