-1

我有 2 个表(table1,table2)table1 有一个字段 id,table2 有一个字段 id_eid,它引用 table1 的 id 字段作为外键。

我必须从 table1 中删除与确定标准匹配的所有行,然后如果在 table2 中引用了这些数据,则也从中删除数据。

我做了类似的事情,假设con是 Connection 对象并且 autocommit 设置为 false 。

    String query1 = "delete from table2 where exists 
(select * from table1 where someparameter = ? and table1.id = table2.id_eid)"

然后我使用 PreparedStatement 执行第一个 query1。

然后我有

    String query2 = "delete from table1 where someparameter = ? 
and exists (select * from table2 where table1.id = table2.id_eid)"

我用另一个 PreparedStatment 执行了这个。

最后我有con.commit()

这不起作用,我想使用自动提交来假这两个查询是一起执行的,但事实并非如此,第二个查询不删除任何行,我该怎么做?

重要说明,并非 table1 中的所有行在 table2 中都有引用行。

谢谢

4

2 回答 2

1

您总是可以先查询要删除的数据,然后再删除它:

1)Select ID from table1 where <criteria>

2)Select ID from table2 where <criteria>

3)Delete from table1 where ID in <results from (1)>

4)Delete from table2 where ID in <results from (2)>

于 2012-04-09T22:23:59.620 回答
0

如果您“必须从 table1 中删除所有符合确定条件的行”,我认为 String query2 必须是

 String query2 = "delete from table1 where someparameter = ?"
于 2012-04-09T22:06:18.947 回答