首页 > 解决方案 > 如何从 PostgreSQL 查询正确构建 KnexJS 查询

问题描述

我很难将 PSQL 查询转换为 KnexJS。

PSQL 中的查询是这样的,但是当我将它添加到一个名为的方法中时joinStatuses(),我只共享我需要转换的内容。

join (
    select
        max(id) as id,
        candidate_id
    from
        statuses
    group by
        candidate_id) ms on
    ms.candidate_id = c.id
join statuses s on
    s.id = ms.id

我尝试在以下方法中插入的查询但由于我不知道最好的方法而失败

在这个方法之前,我们有来自包含这个的类的信息

const selectColumnsOfTable = (prefix, columns) =>
  Object.keys(columns).map(
    (column) => `${columns[column]} AS ${prefix}_${column}`
  );

constructor(tx) {
    this.tx = tx;
    this.builder = this.tx(tableName);
  }
 

从我加入的地方:

columnsByProperties as columnsStatus,
tableName as tableNameStatus,

方法

joinStatus() {
    this.builder
      .join(tableName, function () {
        this.on(
          this.tx(tableNameStatus)
            .select(selectColumnsOfTable('status', columnsStatus))
            .max(columnsStatus.id)
            .as('ms')
            .groupBy(columnsStatus.candidateId)
        );
      })
      .join(tableNameStatus, function () {
        this.on(columnsStatus.id, '=', 'ms'.id);
      });
    return this;
  }

我的问题是这里所说的一切都不是一个函数。

我想让这个工作以正确的方式进行 2 个连接。

标签: postgresqlknex.js

解决方案


推荐阅读