Knex whereExists 与 jsonb_array_elements 查询

问题描述 投票:0回答:1

我对 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,但它不起作用,帮助我

postgresql where-clause knex.js
1个回答
0
投票

然后我尝试得到这样的东西

  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");
    });

我希望这里有人,但是没关系,希望这对你有帮助

© www.soinside.com 2019 - 2024. All rights reserved.