問題タブ [sql-delete]

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.

0 投票する
16 に答える
595001 参照

mysql - MySQLエラー1093-FROM句で更新するターゲットテーブルを指定できません

story_categoryデータベースに破損したエントリのあるテーブルがあります。次のクエリは破損したエントリを返します。

私はそれらを実行して削除しようとしました:

しかし、次のエラーが発生します。

#1093-FROM句で更新するターゲットテーブル'story_category'を指定できません

どうすればこれを克服できますか?

0 投票する
11 に答える
5646 参照

sql - パフォーマンスのために数百万行を超える SQL 重複削除クエリ

これは冒険でした。前の質問にあるループ重複クエリから始めましたが、各ループは1,700 万レコードすべてを超えるため、数週間かかります(MSSQL 2005 を使用してサーバーを実行するだけで*select count * from MyTable*4:30 分かかります)。私はこのサイトとこの投稿から情報を集めました。

そして、以下のクエリに到達しました。問題は、これがどのタイプのパフォーマンスでも 1,700 万件のレコードに対して実行する正しいタイプのクエリであるかということです。そうでない場合、何ですか?

SQL クエリ:

0 投票する
7 に答える
75694 参照

sql-server - SQLServerストアドプロシージャで削除された行の数をカウントする

SQL Server 2005では、行を削除して実際に削除された行数を通知する方法はありますか?

私はselect count(*)同じ条件で行うことができますが、これは完全に信頼できるものである必要があります。

私の最初の推測は@@ROWCOUNT変数を使用することでした-しかしそれは設定されていません、例えば

常に0を返します。

MSDNはOUTPUT構造を提案します。

これは実際には構文エラーで失敗します。

何か案は?

0 投票する
7 に答える
10709 参照

database - ストアドプロシージャの削除クエリ

プロシージャを保存しました:

これを実行すると、

結果:0行が影響を受けました。

しかし、私がこのクエリを試してみると:

結果:2行が影響を受けました。

これの何が問題になっていますか?

0 投票する
16 に答える
123343 参照

mysql - SQLクエリ:最新のNを除くすべてのレコードをテーブルから削除しますか?

最新のN(id descでソート)を除くすべてのレコードをテーブルから削除する単一のmysqlクエリ(変数なし)を構築することは可能ですか?

このようなもの、それだけは機能しません:)

ありがとう。

0 投票する
4 に答える
32476 参照

mysql - 複数のテーブルから行を削除する

SQLを使用して、結合されている複数のテーブルから複数の行を削除しようとしています。

テーブルAはテーブルBに結合されていますテーブルBはテーブルCに結合されています

表Aの行に対応する表BおよびCのすべての行を削除したい

0 投票する
14 に答える
42819 参照

mysql - 一致する行を削除するより速い方法は?

データベースに関しては、私は比較的初心者です。私たちは MySQL を使用しており、現在、実行に時間がかかると思われる SQL ステートメントを高速化しようとしています。SO で同様の質問を探しましたが、見つかりませんでした。

目標は、テーブル B で一致する ID を持つテーブル A のすべての行を削除することです。

現在、次のことを行っています。

テーブル a には約 100K 行、テーブル b には約 22K 行があります。列「id」は、両方のテーブルの PK です。

このステートメントは、私のテスト ボックス (Pentium D、XP SP3、2GB RAM、MySQL 5.0.67) で実行するのに約 3 分かかります。これは私には遅いようです。そうではないかもしれませんが、私は物事をスピードアップしたいと思っていました。これを達成するためのより良い/より速い方法はありますか?


編集:

役に立つかもしれないいくつかの追加情報。テーブル A と B の構造は、テーブル B を作成するために次の手順を実行した場合と同じです。

テーブル a (およびテーブル b) には、それに対して行われるクエリを高速化するのに役立ついくつかのインデックスがあります。繰り返しますが、私は DB 作業の比較的初心者であり、まだ学習中です。これが物事にどの程度の影響を与えるかはわかりません。インデックスもクリーンアップする必要があるため、効果があると思いますよね?また、速度に影響を与える可能性のある他のDB設定があるかどうかも疑問に思っていました.

また、私はINNO DBを使用しています。


ここに、あなたに役立つかもしれないいくつかの追加情報があります。

テーブル A の構造は次のようになります (これを少しサニタイズしました)。

問題の一部は、このテーブルに多数のインデックスがあることにあると思われます。表 B は表 B と似ていますが、列idとしか含まれていませんh

また、プロファイリングの結果は次のとおりです。


解決した

すべての応答とコメントに感謝します。彼らは確かに私にその問題について考えさせました。「a.id を参照する他のテーブルはありますか?」という簡単な質問をすることで、問題を回避できるようにしてくれたdotjoeに感謝します。

問題は、テーブル A に、他の 2 つのテーブル C と D を更新するストアド プロシージャを呼び出す DELETE TRIGGER があったことです。 、それは声明を持っていました、

EXPLAINステートメントを調べて、これを次のように書き直しました。

そのため、これが何をしているのかを見ることができ、次の情報が得られました。

これは、作成するのが骨の折れる操作であり、22500回呼び出されることになるため(削除される特定のデータセットに対して)、それが問題であることがわかりました。その other_id 列に INDEX を作成し、EXPLAIN を再実行すると、次のようになりました。

はるかに良い、実際には本当に素晴らしい.

Index_1 と私の削除時間は、mattkempによって報告された時間と一致していることを追加しました。これは、土壇場でいくつかの追加機能を追加したため、私の側では本当に微妙なエラーでした. ダニエルが述べたように、提案された代替の DELETE/SELECT ステートメントのほとんどは、本質的に同じ時間を要したことが判明しました。私はする必要がありました。この別のテーブル C にインデックスを指定すると、DELETE が高速になりました。

事後分析:
この演習から 2 つの教訓が得られました。まず、SQL クエリの影響をよりよく理解するために、EXPLAIN ステートメントの機能を活用していないことは明らかです。これは初歩的なミスなので、自分を責めるつもりはありません。私はその間違いから学びます。第二に、問題のあるコードは「すぐにやり遂げる」という考え方の結果であり、不適切な設計/テストにより、この問題がすぐに現れなかった. この新しい機能のテスト入力として使用するかなり大きなテスト データ セットをいくつか生成していれば、自分の時間もあなたの時間も無駄にはならなかったでしょう。DB 側での私のテストには、アプリケーション側の深さが欠けていました。今、私はそれを改善する機会を得ました。

参考:EXPLAIN文

0 投票する
2 に答える
2012 参照

sql-server - レコード フィールド < getdate() の場所を削除

テーブルまたはフィールド名を使用せずに、特定のフィールドがSQL サーバーの日付よりも小さい場合に、一連のレコードを削除する方法がわかりません。

私は MSSQL を使用しているので、クエリは次のようになります。

Hibernateにこれをさせるにはどうすればよいですか?HQL を調べていますが、指定する方法がわかりませんgetdate()

0 投票する
2 に答える
1406 参照

jpa - EJB3で関係を持った一括削除を実行する方法

@ManyToOne 関係で一括削除を実行する方法を見つけようとしていますが、これまでのところ成功していません。

シナリオ:

親には多くのダウンロードがあります。親の日付が であるすべてのダウンロードの削除を実行したいと考えています> :some_date。親レコードは削除したくありません。ダウンロード レコードだけを削除します。Download には、@ManyToOne アノテーションを使用してマップされた親フィールドがあります。

これを実現するために、Download エンティティで @NamedQuery を使用しようとしています。

助言がありますか?

0 投票する
3 に答える
355 参照

sql - SQLループを削除

clientid ごとに 1000 エントリのみを保持したいと考えています。以下のコードは私が望むことを行いますが、clientid をループせず、代わりに合計 1000 のクライアントを保持します。

SQLでこれを行う方法はありますか? カーソルが必要だと言われましたが、そうでないことを望んでいます。