Java mysql中的删除查询
我有这些桌子: 表1Java mysql中的删除查询,java,mysql,sql,sql-delete,Java,Mysql,Sql,Sql Delete,我有这些桌子: 表1 id type name parent group_id 1 special name1 0 21 2 Group name2 1 19 3 Group name3 1 22 4 special name4 0 89 表2 id version mcs us
id type name parent group_id
1 special name1 0 21
2 Group name2 1 19
3 Group name3 1 22
4 special name4 0 89
表2
id version mcs user right_id
1 0 15 27 3
2 0 15 27 4
其中table 2中的right\u id
引用table 1中的id
我想要的是删除名称为name2和name3的行,而不使用联接
我尝试了以下方法:
DELETE FROM table2 WHERE right_id in (19, 22);
DELETE FROM table1 WHERE name in ('name2','name3');
它可以工作,但我希望将name2和name3放入变量中,而不是直接使用19和22。您可以在第一次删除中的in
操作符中使用子查询:
DELETE FROM table2
WHERE right_id IN (SELECT id
FROM table1
WHERE name IN ('name2', 'name3'))
假设您要求从表2中删除表1中的任何位置,您希望使用嵌套查询
DELETE FROM table2 WHERE right_id IN (SELECT id
FROM table1
WHERE name IN ('name2', 'name3'))
编辑:您也可以使用join
DELETE FROM table2 as t2, table1 as t1
WHERE t1.id = t2.right_id AND t1.name IN ('name2', 'name3')
我觉得这个问题有个小问题,
DELETE FROM table2 WHERE right_id in (19, 22);
似乎是错的。如果要删除名称为2和名称为3的,则与id 2和3相关。由于right_id指的是id,因此应该是
DELETE FROM table2 WHERE right_id in (2, 3);
但是,为了回答您的问题,您可以使用不带联接的子查询,如下所示
DELETE FROM table2 WHERE right_id in (SELECT id FROM table1 where name in ('name2','name3'));
您是否要求删除表2中引用表1中的行的相同行,而无需指定?你到底在问什么?为什么没有连接?我很困惑,第一次删除不应该“起作用”,因为表2
中没有带右\u id
中那些值的行。我看不出这两个表之间有任何明显的关系。谢谢,修复并添加了连接选项