6

Knex.js を介して次のようなクエリを生成しようとしています。

    INSERT INTO table ("column1", "column2")
    SELECT "someVal", 12345
    WHERE NOT EXISTS (
        SELECT 1
        FROM table
        WHERE "column2" = 12345
    )

基本的に、特定の値がまだ存在しない場合にのみ値を挿入したいと考えています。しかし、Knex.js はこれを行う方法を認識していないようです。(値なしで)呼び出すとknex.insert()、「デフォルト値を挿入」クエリが生成されます。

私は次のことを試しました:

    pg.insert()
        .into(tableName)
        .select(_.values(data))
        .whereNotExists(
            pg.select(1)
                .from(tableName)
                .where(blah)
        );

しかし、それでもデフォルト値が得られます。それを尊重する.columns(Object.keys(data))ことを期待してa を追加しようとしましたが、うまくいきませんでした。insert()

必要なクエリを knex で生成することは可能ですか? または、Knex.js メソッドを使用せずに生のクエリを作成するだけでよいでしょうか?

4

3 に答える 3

5

選択を挿入に渡す必要があると思います:

pg.insert(knex.select().from("tableNameToSelectDataFrom")).into("tableToInsertInto");

また、定数値または式を選択するには、select で knex.raw 式を使用する必要があります。

knex.select(knex.raw("'someVal',12345")).from("tableName")

これは私の最初の投稿であり、特定の例をテストしませんでしたが、上記の手法を使用して、あなたが求めているのと同様のことを行いました.

于 2015-10-02T21:11:59.883 に答える