node.js - Knex 别名 where
问题描述
我使用 knex 查询我的后端
knex('project AS p')
.select('p.name as projectName')
.where('p.name', 'abc')
如果我使用p.name = 'abc'
,那么代码有效
但是,当我使用时出现错误:
.where(projectName, 'abc')
.where(p.name, 'abc')
.where({projectName: abc})
我想使用别名来查询不是 p.name 因为当前端发送请求时,tehy 发送 ?projectName='abc' 而不是 'p.name'='abc'。你知道怎么做吗
例子
SELECT
cp.id AS cId,
(CASE WHEN cp.id = 7 THEN 'abc' ELSE 'NOT abc' END) AS abc
FROM customer_project AS cp
;
我如何这样查询
SELECT
cp.id AS cId,
(CASE WHEN cp.id = 7 THEN 'abc' ELSE 'NOT abc' END) AS abc
FROM customer_project AS cp
WHERE abc = 'abc'
;
得到错误列 abc 不存在。但我真的很想查询 abc 列(虽然它没有退出架构但我创建了它)
解决方案
用于.toSQL()
检查knex
您的案例中生成的查询类型。您在帖子中的示例不起作用(甚至存在语法错误),因此我无法确切说明您做错了什么。
但是,这也应该与 knex 一起正常工作:
> const Knex = require('knex');
undefined
> const knex = Knex({
... client: 'pg',
... });
undefined
>
> console.log(
... knex('project AS p')
... .select('p.name as projectName')
... .where('p.name', 'abc')
... .where('projectName', 'abc')
... .toSQL()
... );
{ method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings: [ 'abc', 'abc' ],
__knexQueryUid: 'c1a458e3-9fc4-4f9b-a206-eee7ecb5b897',
sql: 'select "p"."name" as "projectName" from "project" as "p" where "p"."name" = ? and "projectName" = ?' }
undefined
>
对我来说,生成的 SQL 看起来还不错。
推荐阅读
- android - 不知道 NullPoniter 的确切问题
- node.js - 为什么我的 socket.io 服务器会为客户端分配新的套接字 ID 或丢失现有套接字 ID?
- api - 如果您想通过 API 管理 LTE 接口,您更喜欢哪个网络供应商。思科瞻博网络??或其他供应商
- mdriven - 出于测试原因设置状态机的状态
- python - 如何在 Pandas 中使用 df.apply (lambda) 将 2d 转换为 1d 数组?犯了一些错误
- properties - 我可以在 HTL Slightly 中用逗号分隔标签吗?
- google-sheets - 返回查询公式的工作表名称
- microsoft-teams - 是否可以在 Microsoft Teams 中自定义自定义应用程序的“关于”选项卡?
- nestjs - TypeORM - 使用枚举鉴别器的表继承
- python - Python多处理可能出现死锁,两个队列作为生产者-消费者模式?