我对 postgres 有这样的疑问,并且运行良好
SELECT *
FROM table_name
WHERE NOT EXISTS (
SELECT 1
FROM jsonb_array_elements(column1) AS elem
WHERE elem::jsonb ? 'answer'
) AND column2 IS NOT NULL;
这是我的一些疑问我尝试过的
const data = await knex('table_name')
.select('*')
.whereNotNull('column2')
.where(knex.raw(`jsonb_array_elements(column1) AS elem`))
.whereRaw('elem WHERE elem::jsonb ? answer')
.returning('*');
// or
const data = await knex('table_name').whereExists(function () {
this.select(knex.raw('1'))
.from(knex.raw('jsonb_array_elements(column1) AS elem'))
.whereRaw('elem::jsonb ? \'answer\'');
});
我希望获得column1(jsonb类型)上包含行数据的所有行,而没有可变答案, 但我尝试了很多,但在 knex 上实现它时感到困惑,我尝试在所有查询上使用 raw,但它不起作用,帮助我
然后我尝试得到这样的东西
const data = await knex('table_name')
.whereNotNull('column2')
.whereNotExists(function () {
this.select('*')
.from(knex.raw('jsonb_array_elements(table_name.column1) AS elem'))
.whereRaw("elem->>'answer' IS NOT NULL OR elem->'answer' IS NOT NULL");
});
我希望这里有人,但是没关系,希望这对你有帮助