-1

2つのテーブル(table1、table2)があります。table1にはフィールドidがあり、table2にはフィールドid_eidがあり、table1のidフィールドを外部キーとして参照します。

決定された基準に一致するすべての行をtable1から削除する必要があります。次に、これらのデータがtable2で参照されている場合は、そのデータも削除します。

conConnectionオブジェクトがであり、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を使用して2つのクエリが一緒に実行されたと偽ることを考えていましたが、そうではありません。2番目のクエリは行を削除しません。どうすればよいですか?

重要な注意点として、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から削除する必要がある」場合、Stringquery2は次のようになります。

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