1
select b.b_id from btable b inner join atable a on b.b_id = a_id
go
delete from btable where b_id in (...)
go
insert into btable select * from atable where a_id in (...)
go

2番目と3番目のSQLステートメントの条件は、最初のSQLクエリ結果です。

ここで、これら3つのSQLステートメントを1つのSQLステートメントにマージします。

方法はありますか?

4

3 に答える 3

2

いいえ、できません。

PS:1つのステートメントに3つの句すべてを含めることは、「クエリ最適化」と呼ばれることはほとんどありません。最適化とは、クエリのパフォーマンスを向上させることであり、N個のクエリを取得して1つのクエリで取得することではありません。

実際、初心者の間ではよくある誤解です。クエリが少ないほど、自動的にパフォーマンスが向上するということです。それはただ間違っています。必要なすべてのデータを取得するために必要な数のクエリを用意する必要があります。

于 2012-08-31T03:03:51.520 に答える
2

問題は、なぜそれらすべてを順番に実行する必要がある場合、それらが関連している場合はトランザクションとしてグループ化できるのかということですが、それはテーブルエンジンに依存します

これには、トランザクションの場合、3つすべてが機能する必要があります。

また、トランザクションでは、SQLコマンドの結果をテストして、続行するかどうかを決定できます。

于 2012-08-31T03:06:52.393 に答える
1

マージは不可能だと思いますが、できることは、初期結果セットを一時テーブルに入れて再利用することです。

好き

CREATE TEMPORARY TABLE tbl (b_id int)

select b.b_id into tbl from btable b inner join atable a on b.b_id = a_id

delete from btable where b_id in (select b_id from tbl)

insert into btable select * from atable where a_id in (select b_id from tbl)

drop table tbl

これがあなたに始めるためのいくつかのアイデアを与えることを願っています。

于 2012-08-31T03:45:16.490 に答える