这可能很容易,但是周一早上。我有两张桌子:
表1:
Field | Type | Null | Key | Default | Extra
id | int(32) unsigned | NO | PRI | NULL | auto_increment
group | int(32) | NO | | 0 |
表2:
Field | Type | Null | Key | Default | Extra
group | int(32) | NO | | 0 |
忽略其他字段...我想要一个SQL DELETE语句,它将删除Table1中存在等于Table1.group的Table2.group的所有行。因此,如果Table1的一行具有group = 69,那么当且仅当Table2中存在一个group = 69的行时,才应删除该行。
感谢您的帮助。
答案 0 :(得分:37)
我认为这就是你想要的:
DELETE FROM `table1`
WHERE `group` in (SELECT DISTINCT `group` FROM `table2`)
答案 1 :(得分:18)
我认为这种方式更快:
DELETE FROM t1 USING table1 t1 INNER JOIN table2 t2 ON ( t1.group = t2.group );
答案 2 :(得分:8)
好的解决方案就是编写SQL,就像你自己说的那样:
DELETE FROM Table1
WHERE
EXISTS(SELECT 1 FROM Table2 WHERE Table2.Group = Table1.Group)
此致 阿诺布林克曼
答案 3 :(得分:7)
像这样的东西
delete from table1 where group in (select group from table2)
答案 4 :(得分:1)
脱离我的头顶:
delete from Table1 where id in (select id from table1 inner join table2 on Table1.group = Table2.group)
我的做法与其他海报略有不同 - 我认为如果Table2上有大量行,这可能会更好。有人可以直截了当地指出我吗?
答案 5 :(得分:0)
您可以在简单的联接查询中使用其别名来删除任一表行
delete a from table1 a,table2 b where a.uid=b.id and b.id=57;
在这里,您可以指定a或b删除相应的表行