Java mysql中的删除查询

Java 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

我有这些桌子:

表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        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
中那些值的行。我看不出这两个表之间有任何明显的关系。谢谢,修复并添加了连接选项