我有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()
。
这不起作用,我在考虑使用autocommit来假两个查询一起执行但是不是,第二个查询没有删除任何行,我该怎么做?
一个重要的注意事项,并非table1中的所有行都在table2中有一个引用的行。
由于
答案 0 :(得分: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)>
答案 1 :(得分:0)
如果你 “必须从table1中删除所有符合确定标准的行” 我认为字符串查询2必须是
String query2 = "delete from table1 where someparameter = ?"