テーブルaにテーブルbのサブクエリを挿入しようとしています。サブクエリ内のレコードの多くはすでにテーブルaにあります。ポストグルでこれを行う慣用的な方法は、EXCEPT
クエリを使用するように思われます。しかし、私はknexサポートを見つけることができません(未加工以外)。私が逃したEXCEPT
のクエリを行う方法はありますか?サブクエリに参加してWHERE NOT IN
を実行することができますが、それはかなり遅くなる可能性が高いとわかります。knex.jsのクエリ
0
A
答えて
1
postgresでexistenceをチェックする最速の方法は、私が覚えている限り、where exists/not exists
です。
これは簡単にknex
const knex = require('knex')({ client: 'pg' })
const builder = knex('table_name')
.insert((sub) => {
sub.select('*').from('another_table').whereNotExists((existsBuilder) => {
existsBuilder
.select('*')
.from('table_name')
.whereRaw('table_name.id = another_table.id')
})
})
console.log(builder.toString())
// => insert into "table_name" select * from "another_table" where not exists (select * from "table_name" where table_name.id = another_table.id)
で行うことができます
1
通常、postgresqlはnot in (subquery)
をexcept
と同じに最適化します。
あなたがそれを使用したい場合は、あなたが実際のような何かをする必要があるのでKnexは、EXCEPT
クエリのための特別なサポートを持っていない:
knex.raw(`? EXCEPT ?`, [query1, query2])
パフォーマンスの違いを心配している場合は、私がしようとお勧めしますクエリを実行する両方の方法(EXPLAINクエリ)についてクエリプランをチェックし、内部的にそれらを実行する方法に違いがあるかどうかを確認してください。
関連する問題
- 1. Knex.jsのクエリーラップ
- 2. knex.js移行のタイムスタンプフィールド
- 3. knex.jsこのクエリを実行する方法
- 4. Bookshelf.js/Knex.jsが単一のクエリでネストされています
- 5. Knex.js複数のorderBy()カラム
- 6. knex.js内の既存のクエリから選択してください
- 7. knex.jsを使用したMy Sql Alterテーブル
- 8. Bookshelf.jsとknex.jsを使用したユニットテスト
- 9. knex.jsは移行/シードなしで使用できますか?このknex.jsコードに問題がありますか?
- 10. Knex.js既存のデータを他のテーブルにコピーする
- 11. 私のNode.jsアプリケーションでKnex.jsを使ってマイグレーションを取り除く
- 12. Knex.js移行で既存のデータを移動/コピーする
- 13. マイグレーションファイル(knex.js)の機能を書き留める方法
- 14. Knex.js&MySQL:整数を一括選択のブール値にキャスト
- 15. ユニークな制約関数を持つKnex.jsの移行
- 16. Knex.jsを使用してネストされたリターンモデルを作成する
- 17. knex.jsカスタムダイアレクト内に接続ポイントを作成する
- 18. Knex.jsを使用してGINインデックスを追加する方法
- 19. knex.js - データを簡単に更新する方法
- 20. bookshelf.js/knex.js [mysql] + express.jsを使用して最後のレコードIDを取得する
- 21. Knex.jsが配列としてmax( 'value')を返すのはなぜですか?
- 22. knex.js、左側の "and"条件を翻訳したいと思っています
- 23. Knex.JSでフィールドを追加するときにエラーをキャッチする方法
- 24. objection.jsとknex.jsを使ってテーブルに新しいオブジェクトを追加するには?
- 25. knex.jsを使用して複数のデータベースにどのように接続しますか?
- 26. Knex.jsはある列から他の列にデータを条件付きで移行します
- 27. Knex.jsで列から一意の値を取得するにはどうすればよいですか?
- 28. Knex.js |外部キーのために 'knex seed:run'を2回実行するとエラーが発生する
- 29. 複数の検索条件でKnex.jsとSQLを使用する条件付きフィルタ
- 30. ネストされたレコードは、私たちは以下のようにデータベーススキーマを持ってknex.js