0

次のロジックを実行する 2 つのテーブルがあります。

if (any row with a specific id exist in table1)
{
    1. Delete the row from table1
    2. insert some data into the table2 with the id as one of the values
    3. return success somehow (for me to verify in java)
}
else
{
    return fail
}

これは巧妙な方法で表現できると確信していますが、方法がわかりません。手続き型の考え方からこれを翻訳するのを手伝ってくれる人はいますか?

ご挨拶

4

2 に答える 2

0

いくつかの調査の後、この投稿を見つけました。マイクの答えを少し修正して、次のクエリになりました。

START TRANSACTION;
INSERT INTO table1(col1, col2, col3, id)
SELECT * FROM (SELECT 'value1', 'value2,'valu3', 'id') AS tmp
WHERE EXISTS (
    SELECT id FROM table2 WHERE id='123'
    ) LIMIT 1;
DELETE FROM table2 WHERE id='123';
COMMIT;

ID が table2 に存在する場合、挿入は table1 で実行され、テーブル 2 から削除されます。それ以外の場合、挿入は実行されず、削除によって ID 123 の行が検出されないため、削除されません。また、START TRANSACTION と COMMITを使用して AUTO COMMIT モードを一時的に無効にすることで、すべてのトランザクションが発生するか、(失敗した場合) トランザクションが発生しないようにします。次に、Java で、影響を受けた行の数を確認し、更新が実行されたかどうかを確認できます。

于 2012-10-21T13:52:00.863 に答える
0

使用している言語 (java?) に応じて:

PreparedStatement stmt = conn.prepareStatement("select * from table1 where id = ?");
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.first()) {
    // same for insert and delete
    insert into table2 (id, col2, col3) values(?, ?, ?);
    delete from table1 where id = ?;
    return true;
} else {
    return false;
}
于 2012-10-17T21:50:03.950 に答える