我想用 knex 创建这样的查询:
select "data"."parent"."name"
from "data"."parent"
inner join "data"."child" on child_hashes::jsonb ? "data"."child".hash
where "data"."child"."name" = 'Hans'
child_hashes 是一个
JSON
列,用于存储带有子哈希的有序数组。
knex
.table(this.parentTableName)
.innerJoin(this.childTableName, "child_hashes::jsonb", "?", `${this.childTableName}.hash`)
.where(`${this.childTableName}.name`, name)
.pluck(`${this.parentTableName}.name`);
这会返回双引号中的“child_hashes::jsonb”
select "data"."parent"."name"
from "data"."parent"
inner join "data"."child" on "child_hashes::jsonb" ? "data"."child".hash
where "data"."child"."name" = 'Hans'
knex
.table(this.parentTableName)
.innerJoin(this.childTableName, (query) => {
query.on(this.knex.raw("layer_hashes::jsonb ? ?.hash", ["?", this.childTableName]));
})
.where(`${this.childTableName}.name`, name)
.pluck(`${this.parentTableName}.name`);
这会返回 ?单引号中的运算符
select "data"."parent"."name"
from "data"."parent"
inner join "data"."child" on child_hashes::jsonb '?' "data"."child".hash
where "data"."child"."name" = 'Hans'
在第二个查询中转义
?
后它就起作用了:
knex
.table(this.parentTableName)
.innerJoin(this.childTableName, (query) => {
query.on(this.knex.raw("layer_hashes::jsonb \\? ??.hash", [this.childTableName]));
})
.where(`${this.childTableName}.name`, name)
.pluck(`${this.parentTableName}.name`);