問題タブ [sql-merge]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - ORA-30926:ソース表で安定した行のセットを取得できません
私は得ています
ORA-30926:ソース表で安定した行のセットを取得できません
次のクエリで:
私はtable_1
それがデータを持っていることを実行しました、そしてまた私はまたデータを持っている内部クエリ(src
)を実行しました。
なぜこのエラーが発生し、どのように解決できるのでしょうか。
sql - MERGE と UPSERT の比較
SQL サーバー バックエンドにアクセスして作成しているアプリケーションがあります。最も頻繁に使用される部分の 1 つは、ユーザーが質問に対する回答を選択する場所です。次にストアド プロシージャが起動され、回答が既に与えられているかどうかを確認し、UPDATE が実行されている場合は実行され、そうでない場合は INSERT が実行されます。
これは問題なく動作しますが、SQL Server 2008 Express にアップグレードしたので、新しい MERGE コマンドを使用するようにこの SP を書き直す方が良い/速い/効率的かどうか疑問に思っていました。
これがSELECTの後にINSERTまたはUPDATEを実行するよりも速いかどうか、誰にもわかりませんか?
tsql - SQL MERGE ステートメントでの UPDATE ノーオペレーション
いくつかの永続データを含むテーブルがあります。クエリを実行すると、結果に必要な値を計算するかなり複雑な CTE もあり、不足している行を永続テーブルに挿入する必要があります。最後に、CTE によって識別されたすべての行で構成される結果を選択したいと思いますが、それらが既にテーブルにある場合はテーブルのデータを使用し、行が挿入されたかどうかの情報が必要です。
簡略化すると、これは次のように機能します (試してみたい場合は、次のコードを通常のクエリとして実行します)。
私はその部分が好きではありません。冗長な更新を残しておきたいのですが、句WHEN MATCHED THEN UPDATE
で結果行を取得できません。OUTPUT
これは、この種のデータを完成させて返す最も効率的な方法ですか?
MERGE
または、たとえば、 を使用して結果を事前に計算してから、である行の をSELECT
実行するなど、 を使用しないより効率的なソリューションはありますか? 基本的に「クラスター化インデックスマージ」に要約されるため、クエリプランを解釈するのが困難です。これは、別のバリアントに続くものと比較して、パフォーマンスに関してかなり曖昧です。また、SQL Server (2008 R2 with CU1) は実際に、何もしない (たとえば、書き込みが不要) ことを確認できるほどスマートなのだろうかと思います。INSERT
new=0
SELECT
INSERT
UPDATE
c# - Entity Framework での MERGE
.NET Entity Framework 4 からT-Sql の MERGEコマンドを呼び出す方法はありますか?
sql-server-2008 - SQL Server での非常に大きなテーブルの UPDATE または MERGE
非常に大規模 (300M レコード) で広範な を毎日更新する必要がありますTABLE1
。更新のソース データはUTABLE
、行の 10% ~ 25% であるTABLE1
が狭い別のテーブルにあります。両方のテーブルrecord_id
に主キーがあります。
現在、TABLE1
次のアプローチを使用して 再作成しています。
ただし、これには私のサーバー (SQL Server の場合は 60GB の RAM) では 40 分近くかかります。パフォーマンスを 50% 向上させたいと考えています。他にどのようなオプションを試すことができますか?
/li>MERGE
そしてUPDATE
-以下のコードのようなものは、非常に小さなUTABLE
テーブルでのみ高速に動作します-フルサイズでは、すべてがハングします:ROWCOUNT を使用してバッチ MERGE を実行できると聞きましたが、3 億行のテーブルに対して十分な速度が得られるとは思いません。
役立つ SQL クエリのヒントはありますか?
mysql - MySQL で 2 つのテーブルをマージする方法と、テーブル 1 がプライマリの場合
MySQL で 2 つのテーブルをマージするにはどうすればよいですか? このトピックに関する他のいくつかの投稿を見てきましたが、十分に詳しく説明していません。
私は初心者の MySQL ユーザーなので、次のようなプライマリ テーブルと一時テーブルがあることをご了承ください。
CREATE TABLE
temp_import
(id
int(11) NOT NULL auto_increment,
Name
varchar(255) デフォルト NULL,
MerchantID
int(11) デフォルト NULL,
SKU
varchar(255) デフォルト NULL,
PRIMARY KEY (id
) ) ENGINE=MyISAM AUTO_INCREMENT=765811 DEFAULT CHARSET=utf8;
次のように一時テーブルにデータを挿入しています。
各テーブルのテーブル形式は同じですが、データは時間の経過とともに変化します。一部のアイテムはデータの可能性がありますが、SKU は一定のままです。一部のアイテムは提供されなくなり、データベースから削除する必要があります。
例:
現在のデータベース テーブル:
新しいデータベース テーブル:
最終結果は
チキンフードを削除、カエルを追加、猫を更新。
また、これは可能な限り効率的である必要があります。私はいくつかの巨大なファイルで作業します。また、MySQL のみのコードにすることもできます。
http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/ 私はこれを見てきましたが、それは私の頭の中にあります。うまくいかない...
sql - AUTO_INCREMENT 列を含む MERGE INTO テーブル
監査トリガーで使用するために、次のテーブルを宣言しました。
トリガーは、同じトランザクションで複数回呼び出されます。
トリガーが初めて呼び出されたときに、現在の TRANSACTION_ID() と時刻を含む新しい行を挿入したいと考えています。
その後、トリガーが呼び出されたときに、「uuid」または「time」を変更せずに、既存の「id」を返すようにします (最後に Statement.getGeneratedKeys() を呼び出します)。
現在のスキーマには 2 つの問題があるようです。
呼び出すと、次の
MERGE INTO audit_transaction_ids (uuid, time) KEY(id) VALUES(TRANSACTION_ID(), NOW())
ようになります。org.h2.jdbc.JdbcSQLException: Column "ID" contains null values; SQL statement: MERGE INTO audit_transaction_ids (uuid, time) KEY(id) VALUES (TRANSACTION_ID(), NOW()) [90081-155]
既存の行で MERGE を呼び出すと、「時間」が変更されると思われます。
これらの両方の問題を解決するにはどうすればよいですか?
sql-server - 一般的なパブリッシング コンテキストでの T-SQL MERGE のパフォーマンス
私は、「パブリッシャー」アプリケーションが、非常に複雑なビューを照会し、個別の挿入、更新、および削除操作を使用して、結果を非正規化されたビュー モデル テーブルにマージすることにより、基本的にビュー モデルを最新の状態に保つ状況を持っています。
SQL 2008 にアップグレードしたので、これらを SQL MERGE ステートメントで更新する絶好の機会だと思いました。ただし、クエリを記述した後、MERGE ステートメントのサブツリー コストは 1214.54 です。従来の方法では、挿入/更新/削除の合計はわずか 0.104 でした。
同じ正確な操作を説明するより簡単な方法が、どうしてこれほどくだらないものになるのか、私にはわかりません。おそらく、私ができない私のやり方の誤りを見ることができるでしょう。
テーブルに関するいくつかの統計: 190 万行あり、MERGE 操作ごとに 100 以上の行が挿入、更新、または削除されます。私のテスト ケースでは、影響を受けるのは 1 つだけです。
では、これはどのようにして 1200 のサブツリー コストになるのでしょうか? テーブル自体からのデータ アクセスは非常に効率的です。実際、MERGE のコストの 87% は、チェーンの終わり近くにあるソート操作からのもののようです。
MERGE (0%) <- インデックスの更新 (12%) <- 並べ替え (87%) <- (...)
そして、そのソートには、それに出入りする0行があります。0 行をソートするのに 87% のリソースが必要なのはなぜですか?
アップデート
MERGE 操作のみの実際の (推定ではない)実行計画をGist に投稿しました。
sql - Merge statement and after triggers on target table
I have two after triggers on target table (one for insert and one for update). Now if I execute merge on the target table, the triggers are executed only once. Although the merge statement executes around 300 updates, and 200 inserts.
I checked it with print statements in each trigger, right after getting data from deleted, inserted record into variables.
How come? Is this a bug?
I have SQL Server 2008 sp1 std (part of the SBS2k8).